2009-11-10 2 views
8

Я хочу, чтобы ячейка таблицы имела только значок без текста.Как разместить QTableWidgetItem Icon в центре ячейки

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

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

посмотреть столбцы состояния и энергии.

alt text http://i35.tinypic.com/2gx2tj5.png

ответ

8

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

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

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

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

К сожалению, нет никакого способа установить option.decorationPosition к центру, только сверху, слева, справа или снизу. Который кажется довольно упущением. Для этого вам нужно либо использовать QTableWidget :: setCellWidget(), чтобы установить QLabel с QPixmap, либо использовать QStyledItemDelegate и переопределить QStyledItemDelegate :: paint(). Также возможно переопределить окраску QTableWidgetItem или QTableWidget. –

2

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

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

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

1

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

5

У меня был аналогичный проблема, которую я решил ее без суб причислять с помощью 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

1

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

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

Смежные вопросы