2009-11-10 15 views

Odpowiedz

8

Możesz wpływać na pozycję ikony w stosunku do tekstu za pomocą opcji stylu.

Jeśli QTableWidgetItem jest skonstruowany bez tekstu (przez konstruktor, który nie akceptuje argumentu tekstowego), element danych Qt :: DisplayRole nie jest ustawiony i tekst nie zostanie wyświetlony ani nie wpłynie na wyświetlanie ikon prostokąt.

udało mi się wpłynąć na pozycję ikonę QTableWidgetItem poprzez instacji QTableWidget, przesłanianie metody viewOptions i ustawienie pole decorationAlignment opcje widoku, tak:

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

Niestety nie ma sposobu, aby ustawić option.decorationPosition do centrum, tylko góra, lewo, prawo lub dół. Co wydaje się dość zaniedbaniem. W tym celu należy użyć QTableWidget :: setCellWidget(), aby ustawić QLabel z QPixmap lub użyć QStyledItemDelegate i zastąpić QStyledItemDelegate :: paint(). Możliwe jest również zastąpienie malowania QTableWidgetItem lub QTableWidget. –

2

myślę, że to podstawowe zachowanie QTableWidgetItem które nie pozwalają na zmianę czegokolwiek związanego z ikoną ...

Wystarczy popatrzeć na przykład „Star Delegat przykładu” z Qt, może znajdziesz coś interesującego dla twojego problemu! To trochę pracy, ale powinieneś być w stanie "narysować" komórkę w inny sposób, gdy nie zawiera ona żadnego tekstu!

Nadzieję, że ta pomoc trochę!

1

Wygląda na to, że musisz podklasę QTableWidgetItem i przepisać funkcję paintEvent, w której będziesz mógł narysować ikonę tam, gdzie chcesz.

5

miałem podobny problem rozwiązany bez pogrupowanie stosując QLabel jak cellwidget
(niestety i potrzebne użycie układu zbyt)

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); 

I używana FOLL dzięki podejście:
http://falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

1

Można użyć: setCellWidget, jak następuje:

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); 

To będzie umieścić ikonę w centrum

Powiązane problemy