2009-11-10 5 views
8

Je souhaite qu'une cellule de tableau ne contienne qu'une icône sans texte.comment placer l'icône QTableWidgetItem au centre de la cellule

i voir la classe QTableWidgetItem a une méthode pour aligner le texte (int QTableWidgetItem::textAlignment() const)

je trouve aucun moyen de régler la position de l'icône (qui semble se coincer sur la gauche - même si il n'y a texte dans la cellule)

Regardez les colonnes Statut et Energie.

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

Répondre

8

Vous pouvez affecter la position de l'icône par rapport au texte via les options de style. Si le QTableWidgetItem est construit sans aucun texte (via le constructeur qui n'accepte pas un argument de texte), l'élément de données Qt :: DisplayRole n'est pas défini et le texte ne sera pas affiché et n'affectera pas l'affichage des icônes rectangle.

j'ai pu affecter la position de l'icône du QTableWidgetItem en dérivant QTableWidget, remplaçant la méthode viewoptions et le réglage de la decorationAlignment champ des options d'affichage, comme ceci:

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

Malheureusement, il n'y a aucun moyen de mettre option.decorationPosition au centre, seulement haut, gauche, droite ou bas. Ce qui semble tout à fait une omission. Pour cela vous devez soit utiliser QTableWidget :: setCellWidget() pour définir un QLabel avec un QPixmap ou utiliser QStyledItemDelegate et remplacer QStyledItemDelegate :: paint(). Il peut également être possible de remplacer la peinture de QTableWidgetItem ou de QTableWidget. –

2

Je pense qu'il est le comportement de base de la QTableWidgetItem qui ne vous permet pas de changer quoi que ce soit lié à l'icône ...

Jetez un oeil à l'exemple « Star délégué exemple » de Qt, peut-être que vous trouverez quelque chose d'intéressant pour votre problème! C'est un peu de travail, mais vous devriez être capable de "dessiner" la cellule d'une manière différente quand elle ne contient aucun texte!

J'espère que cet aide un peu!

1

Il semble que vous devez sous-classer QTableWidgetItem et réécrire la fonction paintEvent où vous pourrez dessiner l'icône où vous voulez.

0

Vous devez utiliser un délégué

5

J'ai eu un semblable problème je l'ai résolu sans sous classage en utilisant un QLabel comme cellwidget
(malheureusement je besoin d'utiliser une mise en page aussi):

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

je le foll approche en raison:
http://falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

1

Vous pouvez utiliser: setCellWidget, comme suit:

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

Cela mettra l'icône au centre

Questions connexes