как разместить значок QTableWidgetItem в центре ячейки - PullRequest
8 голосов
/ 10 ноября 2009

я хочу, чтобы в ячейке таблицы был только значок без текста.

я вижу, что у класса QTableWidgetItem есть метод для выравнивания текста (int QTableWidgetItem::textAlignment () const)

я не могу отрегулировать расположение иконки (которая, кажется, застревает слева - даже там, где в ячейке нет текста)

посмотрите на столбцы Status и Energy.

alt text

Ответы [ 6 ]

8 голосов
/ 30 ноября 2009

Вы можете повлиять на положение значка по отношению к тексту с помощью параметров стиля.

Если QTableWidgetItem создается без какого-либо текста (через конструктор, который не принимает текстовый аргумент), тогда элемент данных Qt :: DisplayRole не установлен, и текст не будет отображаться и не будет влиять на прямоугольник отображения значков .

Мне удалось повлиять на положение значка QTableWidgetItem путем создания подкласса QTableWidget, переопределения метода viewOptions и установки поля ornamentAlignment для параметров просмотра, например:

QStyleOptionViewItem MyTableWidget::viewOptions() const
{
    QStyleOptionViewItem option = QTableWidget::viewOptions();
    option.decorationAlignment = Qt::AlignHCenter | Qt::AlignCenter;
    option.decorationPosition = QStyleOptionViewItem::Top;
    ...
    return option;
}
6 голосов
/ 29 мая 2015

У меня была похожая проблема, я решил ее без подклассов, используя 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

2 голосов
/ 25 августа 2016

Вы можете использовать: 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);

Это поместит иконку в центр

2 голосов
/ 10 ноября 2009

Я думаю, что это базовое поведение QTableWidgetItem, которое не позволяет вам изменять что-либо, связанное с иконкой ...

Посмотрите на пример "Star Delegate Example" из Qt, возможно, вы найдете что-то интересное для вашей проблемы! Это немного трудоемко, но вы должны быть в состоянии «нарисовать» ячейку по-другому, если она не содержит текста!

Надеюсь, это поможет немного!

1 голос
/ 10 ноября 2009

Кажется, вы должны создать подкласс QTableWidgetItem и переписать функцию paintEvent, где вы сможете нарисовать значок там, где вы хотите.

0 голосов
/ 10 ноября 2009

Вам необходимо использовать делегата

...