كيف يمكنني وضع أيقونة QtableWidegetitem في وسط الخلية

StackOverflow https://stackoverflow.com/questions/1707967

  •  19-09-2019
  •  | 
  •  

سؤال

أريد خلية جدول الحصول على أيقونة فقط دون أي نص.

أرى ال QTableWidgetItem الطبقة لديها طريقة لمحاذاة النص (int QTableWidgetItem::textAlignment () const)

أجد طريقة لضبط موضع الرمز (والذي يبدو أن تعثر على اليسار - حتى حيث لا يوجد نص في الخلية)

انظر إلى أعمدة الحالة والطاقة.

alt text

هل كانت مفيدة؟

المحلول

يمكنك التأثير على موضع الرمز فيما يتعلق بالنص عبر خيارات النمط.

إذا تم إنشاء QtableWidegetitem دون أي نص (عبر المنشئ لا يقبل حجة نصية)، فلن يتم تعيين عنصر بيانات QT :: DisplayRole ولا يتم عرض النص ولن يؤثر على أيقونات العرض المستطيل.

تمكنت من التأثير على موضع أيقونة QtableWidegetitem من خلال فئة Subclassing qtableWidget، وتجاوز طريقة العرض والعرض decoralignment. مجال خيارات العرض، مثل هذا:

QStyleOptionViewItem MyTableWidget::viewOptions() const
{
    QStyleOptionViewItem option = QTableWidget::viewOptions();
    option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
    option.decorationPosition = QStyleOptionViewItem::Top;
    ...
    return option;
}

نصائح أخرى

كان لدي مشكلة مماثلة حلها دون الفصول الفرعية باستخدام Qlabel كما cellwidget
(للأسف كنت بحاجة لاستخدام تخطيط، أيضا):

int row = 0;
int column = 0;
QSize sizeIcon(32, 32);
QString iconSrc = ":/Actions/myicon.png";

QWidget *pWidget = new QWidget();
QLabel *label = new QLabel;
label->setMaximumSize(sizeIcon);
label->setScaledContents(true);
label->setPixmap(QPixmap(iconSrc));
QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(label);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
pWidget->setLayout(pLayout);

this->ui->myTableWidget->setCellWidget(row, column, pWidget);

لقد استخدمت النهج التالي:
http://falsinsoft.blogspot.de/21/11/qtablewidget-center-checkbox-inside-cell.html.

أعتقد أنه السلوك الأساسي ل QtableWidegetitem لا يسمح لك بتغيير أي شيء يتعلق بالأيقونة ...

إلقاء نظرة على مثال "مثال مندوب النجوم" من كيو تي، ربما ستجد شيئا مثيرا لمشكلتك! إنه قليل من الوظيفة، لكن يجب أن تكون قادرا على "رسم" الخلية بطريقة مختلفة عندما لا تحتوي على أي نص!

آمل أن هذا يساعد قليلا!

يمكنك استخدام: setcellwidget، على النحو التالي:

QLabel *lbl_item = new QLabel();
lbl_item ->setPixmap(*ui->my_label->pixmap());
lbl_item ->setAlignment(Qt::AlignHCenter);
ui->my_tablewidget->setCellWidget(row, column, lbl_item);

هذا سوف يضع الرمز في المركز

يبدو أنه يجب عليك الفئة الفرعية QTableWidgetItem وإعادة كتابة paintEvent وظيفة حيث ستتمكن من رسم أيقونة حيث تريد.

تحتاج إلى استخدام مندوب

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top