2009-11-10 29 views
8

quiero que una celda de la tabla tenga solo un ícono sin texto.cómo coloco el ícono QTableWidgetItem en el centro de la celda

i consulte la clase QTableWidgetItem tiene un método para alinear el texto (int QTableWidgetItem::textAlignment() const)

no encuentro manera de ajustar la ubicación del icono (que parece quedar pegado a la izquierda - incluso donde no hay texto en la celda)

mira las columnas Estado y Energía.

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

Respuesta

8

Puede afectar a la posición del icono en relación con el texto a través de las opciones de estilo.

Si QTableWidgetItem se construye sin texto (mediante el constructor que no acepta un argumento de texto), el elemento de datos Qt :: DisplayRole no se configura y el texto no se mostrará ni afectará a la visualización de iconos rectángulo.

que era capaz de afectar a la posición del icono de la QTableWidgetItem subclasificando la QTableWidget, reemplazando el método viewOptions y establecer el campo decorationAlignment de las opciones de visualización, como esto:

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

Desafortunadamente, no hay manera de establecer option.decorationPosition al centro, a sólo arriba, izquierda, derecha o abajo. Lo cual parece una omisión. Para eso, necesita usar QTableWidget :: setCellWidget() para establecer QLabel con un QPixmap o usar QStyledItemDelegate y reemplazar QStyledItemDelegate :: paint(). También es posible anular la pintura de QTableWidgetItem o QTableWidget. –

2

Creo que es el comportamiento básico de la QTableWidgetItem que no le permiten cambiar todo lo relacionado con el icono ...

Tener un vistazo al ejemplo de "Star Delegado Ejemplo" de Qt, ¡quizás encuentres algo interesante para tu problema! ¡Es un poco trabajo, pero deberías poder "dibujar" la celda de una manera diferente cuando no contiene ningún texto!

Espero que esto ayude un poco!

1

Parece que debe crear la subclase QTableWidgetItem y volver a escribir la función paintEvent donde podrá dibujar el icono donde desee.

0

Es necesario utilizar un delegado

5

que tenían un parecido problema lo resolví sin sub classing mediante el uso de un QLabel como cellwidget
(por desgracia i necesitaba usar un diseño, también):

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

utilicé el SS enfoque debido:
http://falsinsoft.blogspot.de/2013/11/qtablewidget-center-checkbox-inside-cell.html

1

que puede utilizar: setCellWidget, de la siguiente manera:

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

Esto pondrá el icono situado en el centro

Cuestiones relacionadas