كيف يمكنني وضع أيقونة QtableWidegetitem في وسط الخلية
المحلول
يمكنك التأثير على موضع الرمز فيما يتعلق بالنص عبر خيارات النمط.
إذا تم إنشاء 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
وظيفة حيث ستتمكن من رسم أيقونة حيث تريد.
تحتاج إلى استخدام مندوب