7
votes

Puis-je avoir plus d'une ligne dans une en-tête de table en qt?

J'utilise qt4 et j'ai un qtableview qui affiche des données à l'aide d'un modèle personnalisé. J'aimerais avoir deux rangées dans l'en-tête de la table, idéalement avec certaines des cellules de la première rangée couvrant plusieurs colonnes. Est-ce possible?


0 commentaires

5 Réponses :


2
votes

Vous pouvez créer un en-tête personnalisé en effectuant un qtablowwidgetem , puis à l'aide de la SéthorizontalheaderItem () . La méthode prend un numéro de colonne. Je ne suis donc pas sûr que cela permettra de couvrir de multiples colonnes de manière nativement - cependant, au moins, vous pouvez utiliser le même QTableWidgetem pour plusieurs colonnes.

En ce qui concerne deux rangées dans l'en-tête, je ne crois pas que cela est actuellement pris en charge. Cependant, vous pouvez probablement ajouter cette fonctionnalité en roulant votre propre classe dérivée de QTableWidget si vous êtes ambitieux.


0 commentaires

3
votes

Moi aussi je cherchais une solution à ce problème. J'ai trouvé cette classe: HierarchicalheView À Qt-apps.org par l'utilisateur Barmaglodd (Krasnoshnoschchekov Petr).

Cette solution dépasse ce que vous (et i) besoin. En outre, je ne peux pas utiliser leur solution en raison de leur avis de copyright.

Ce message de blog.qt.digia.com de Andy Shaw vous montre comment superposer qcomboboxes sur une en-tête. Dans ma solution, j'ai fait la même chose avec une autre vue d'en-tête. Ceci est similaire à la façon dont ils superposé a QTableView sur un QTableView pour le Exemple de colonne Frozen Qt . Pour cette solution, vous devez la sous-classer à la fois le QTableWidget et QaeView. En outre, si vous souhaitez laisser l'utilisateur ajuster la largeur de la colonne qui prend des travaux supplémentaires.

Conseil: Surchargez le sizeHint pour donner une hauteur 2x de la hauteur normale du roffre "principal", alignez le texte de la Vue d'en-tête principale sur le bas et dessinez l'autre feu arrière sur le dessus de la normale, faites-le dans la méthode xxx

.


2 commentaires

Votre premier lien est génial, mais je me demande dans quelle circonstances vous trouverez peut-être un code agréé BSD inutilisable en raison de la licence?


@Predelnik, je ne suis pas sûr; Je dois avoir confondu la licence de ce projet avec un autre.



7
votes

J'ai eu un problème similaire concernant les lignes d'en-tête multiples d'un QTableView. J'ai résolu l'utilisation d'un simple "\ n" dans le texte d'en-tête de colonne.


0 commentaires

3
votes

Sous l'impression de hierarchicalheview j'ai fait un Python Port de celui-ci et un modèle simple pour afficher les fichiers de données Pandas avec des en-têtes multiniveaux (MultiDex) dans QTableView.

Voici les premiers résultats DataframeLodel . UPD: C'est assez lent avec de gros dataframes


0 commentaires

0
votes

Je vais écrire ma solution, c'est peut-être une béquille. Mais j'ai redéfini Qareview CODE> et, y compris, au lieu des cellules standard, j'ai utilisé mes propres doubles. Ces doubles cellules sont essentiellement un QTableWidget code> sans en-tête.

CHeaderViewCell::CHeaderViewCell(const int rowNumber, const int columnsNumber, QWidget* parent)
    : m_CellData(new QTableWidget(rowNumber, columnsNumber, parent))
    , m_Rows(rowNumber)
    , m_Columns(columnsNumber)
{
    m_CellData->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    m_CellData->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    m_CellData->setSelectionMode(QAbstractItemView::NoSelection);
    m_CellData->setEnabled(false);

    /* Hide Headers */
    m_CellData->verticalHeader()->hide();
    m_CellData->horizontalHeader()->hide();

    m_CellData->horizontalHeader()->setMinimumSectionSize(25);

}


1 commentaires

Veuillez ajouter plus de détails pour développer votre réponse, telle que le code de travail ou les citations de documentation.