Comment puis-je ajouter un en-tête avec des données à un QTableWidget dans Qt?
-
22-09-2019 - |
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.
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.