Domanda

Voglio una cella di una tabella di avere solo un'icona senza alcun testo.

I vedere la classe QTableWidgetItem ha un metodo per allineare il testo (int QTableWidgetItem::textAlignment () const)

ho trovato alcun modo per regolare la posizione dell'icona (che sembra rimanere bloccati a sinistra - anche dove non v'è alcun testo nella cella)

sguardo alle colonne di stato e di energia.

alt text

È stato utile?

Soluzione

È possibile influenzare la posizione dell'icona in relazione al testo tramite le opzioni di stile.

Se il QTableWidgetItem è costruito senza alcun testo (tramite il costruttore che non accetta un argomento di testo), quindi il dato Qt :: DisplayRole non è impostato e non verrà visualizzato il testo né interesserà le icone mostrano rettangolo .

Sono stato in grado di influenzare la posizione della icona del QTableWidgetItem sottoclasse il QTableWidget, l'override del metodo viewOptions e l'impostazione del decorationAlignment delle opzioni di visualizzazione, in questo modo:

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

Altri suggerimenti

Ho avuto un problema simile ho risolto senza sub classing utilizzando un QLabel come cellwidget
(purtroppo ho avuto bisogno di utilizzare un layout, anche):

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

Ho usato il seguente approccio:
http : //falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

Credo che sia il comportamento di base del QTableWidgetItem che non consente di cambiare tutto ciò che riguarda l'icona ...

Date un'occhiata all'esempio "Star delegato Esempio" da Qt, forse troverete qualcosa di interessante per il vostro problema! E 'un po' di lavoro, ma si dovrebbe essere in grado di "disegnare" la cella in un modo diverso, quando non contiene alcun testo!

Spero che questo aiuta un po '!

È possibile utilizzare: setCellWidget, come segue:

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

Questo metterà l'icona al centro

Sembra è necessario creare una sottoclasse QTableWidgetItem e riscrivere il href="http://doc.trolltech.com/4.2/qwidget.html#paintEvent" rel="nofollow noreferrer"> paintEvent funzione

È necessario utilizzare un delegato

scroll top