Question

Je suis encore à apprendre Qt et je suis redevable à la communauté afin de me donner des réponses très grandes, en temps opportun à mes questions Qt. Merci.

Je suis assez confus sur l'idée d'ajouter un en-tête à un QTableWidget. Ce que je voudrais faire est d'avoir une table qui contient des informations sur les membres de l'équipe. Chaque row pour un membre doit contenir son prénom et son nom, chacun dans sa propre cellule, une adresse e-mail dans une cellule, et le bureau dans l'autre cellule. Je voudrais avoir un header au-dessus de ces colonnes pour les nommer, selon le cas.

Je suis en train de commencer facile et obtenir juste l'en-tête pour afficher « Last » (comme nom de famille). Voici mon code.

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

Ma table se rend corretly, mais l'en-tête ne contient pas ce que j'attendais. Il contient 1 cellule qui contient le texte « 1 ».

Je suis évidemment en train de faire quelque chose de très stupide ici qui ne va pas, mais je suis perdu. Je continue à verser sur la documentation, ne trouvant rien.

Merci pour toute aide.

Était-ce utile?

La solution 3

A la demande de la personne qui m'a dirigé vers le bon endroit, je signale la façon dont j'accompli cela comme une réponse et je suis l'accepter.

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

Autres conseils

La solution est plus facile setHorizontalHeaderLabels(myListOfHeaderLabels).

Je vois un problème potentiel, et aussi un moyen plus facile de le faire.

Tout d'abord, le problème:

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.

Je pense que vous voulez faire ceci:

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

Maintenant, la façon plus facile de définir les données pour un élément d'en-tête:

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

Pour la postérité:

Les implimentations par défaut de setHeaderData () et headerData () dans QAbstractItemModel ne font rien. Vous pouvez (devrait?) (Re) impliment headerData () afin de retourner une étiquette utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top