Pregunta

Todavía estoy aprendiendo Qt y estoy en deuda con la comunidad de SO para proporcionar mí con grandes respuestas, muy oportunas a mis preguntas Qt. Gracias.

estoy muy confusa, en la idea de añadir una cabecera a un QTableWidget. Lo que me gustaría hacer es tener una tabla que contiene información sobre los miembros del equipo. Cada row para un miembro debe contener su nombre y apellido, cada uno en su propia celda, una dirección de correo electrónico en una celda, y la oficina en la otra celda. Me gustaría tener un header por encima de estas columnas para nombrarlos según el caso.

Estoy intentando comenzar fácil y obtener sólo el encabezado de la pantalla "Última" (como en el apellido). Aquí está mi código.

int column = m_ui->teamTableWidget->columnCount();
m_ui->teamTableWidget->setColumnCount(column+1);
QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
Qt::Horizontal, QVariant(QVariant::String, &qq));

Mi mesa se vuelve corretly, pero el encabezado no contiene lo que se esperaría. Contiene 1 celda que contiene el texto "1".

Obviamente estoy haciendo algo muy tonto aquí lo que está mal, pero estoy perdido. No dejo de verter sobre la documentación, sin encontrar nada.

Gracias por cualquier y toda la ayuda.

¿Fue útil?

Solución 3

A petición de la persona que me condujo hacia el lugar correcto, estoy fijando la forma en que he logrado esto como una respuesta y estoy aceptando a él.

    m_ui->teamTableWidget->setColumnCount(m_ui->teamTableWidget->columnCount()+1);
    QTableWidgetItem* qtwi = new QTableWidgetItem(QString("Last"),QTableWidgetItem::Type);
    m_ui->teamTableWidget->setHorizontalHeaderItem(0,qtwi);

Otros consejos

La solución más fácil es setHorizontalHeaderLabels(myListOfHeaderLabels).

Veo un problema potencial, y también una manera más fácil de hacer esto.

En primer lugar, el problema:

QString* qq = new QString("Last"); // <- qq is a pointer to a string.
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
    Qt::Horizontal, 
    QVariant(QVariant::String, &qq)); // <- You take the address of a pointer, or create a handle.

creo que quiere hacer esto en su lugar:

QString* qq = new QString("Last");
m_ui->teamTableWidget->horizontalHeader()->model()->setHeaderData(0, 
    Qt::Horizontal, QVariant(QVariant::String, *qq));

Ahora, la forma más fácil de configurar los datos para un elemento de encabezado:

m_ui->teamTableWidget->horizontalHeaderItem( 0 )->setText( "Last" );

Para la posteridad:

Los implimentations por defecto de setHeaderData () y headerData () en QAbstractItemModel no hace nada. Usted puede (debe?) (Re) impliment headerData () con el fin de devolver una etiqueta útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top