表のセルにテキストなしでアイコンだけを表示したい。
QTableWidgetItem
クラスにテキストを揃えるメソッドがあることがわかりました( int QTableWidgetItem::textAlignment () const
)
アイコンの配置を調整する方法が見つかりません(セルにテキストがない場合でも、左側に固定されているようです)
ステータスとエネルギーの列を見てください。
スタイル オプションを使用して、テキストに対するアイコンの位置に影響を与えることができます。
QTableWidgetItem がテキストなしで (テキスト引数を受け入れないコンストラクターを介して) 構築された場合、Qt::DisplayRole データ項目は設定されず、テキストは表示されず、アイコン表示四角形にも影響しません。
次のように、QTableWidget をサブクラス化し、viewOptions メソッドをオーバーライドし、ビュー オプションのdecorationAlignmentフィールドを設定することで、QTableWidgetItem のアイコンの位置に影響を与えることができました。
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/2013/11/qtablewidget-center-checkbox-inside-cell.html
次のように 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 の基本的な動作だと思います...
Qt の "Star Delegate Example" の例を見てください。問題に興味深いものが見つかるかもしれません。ちょっとした作業ですが、セルにテキストが含まれていない場合は、別の方法でセルを「描画」できるはずです。
これが少し役立つことを願っています!
必要な場所にアイコンを描画できる関数をサブクラス化QTableWidgetItem
して書き直す必要があるようです。paintEvent