как разместить значок QTableWidgetItem в центре ячейки
Вопрос
я хочу, чтобы в ячейке таблицы был только значок без текста.
я вижу QTableWidgetItem
класс имеет метод для выравнивания текста (int QTableWidgetItem::textAlignment () const
)
я не могу настроить расположение значка (который, кажется, застревает слева, даже если в ячейке нет текста)
посмотрите на столбцы «Состояние» и «Энергия».
Решение
Вы можете изменить положение значка относительно текста с помощью параметров стиля.
Если QTableWidgetItem создается без какого-либо текста (через конструктор, который не принимает текстовый аргумент), тогда элемент данных Qt::DisplayRole не устанавливается, и текст не будет отображаться и не повлияет на прямоугольник отображения значков.
Мне удалось повлиять на положение значка QTableWidgetItem, создав подкласс QTableWidget, переопределив метод viewOptions и установив украшениеВыравнивание поле параметров просмотра, например:
QStyleOptionViewItem MyTableWidget::viewOptions() const
{
QStyleOptionViewItem option = QTableWidget::viewOptions();
option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
option.decorationPosition = QStyleOptionViewItem::Top;
...
return option;
}
Другие советы
У меня была аналогичная проблема, я решил ее без подкласса, используя QLabel в качестве виджета ячейки.
(к сожалению, мне тоже пришлось использовать макет):
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
Я думаю, что это базовое поведение QTableWidgetItem, которое не позволяет вам изменять что-либо, связанное со значком...
Посмотрите пример «Пример звездного делегата» из Qt, возможно, вы найдете что-то интересное для своей проблемы!Это небольшая работа, но вы сможете «рисовать» ячейку по-другому, если она не содержит текста!
Надеюсь, это немного поможет!
Вы можете использовать: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
функция, с помощью которой вы сможете нарисовать значок там, где хотите.
Вам нужно использовать делегата