J'utilise qt4 et j'ai un qtableview code> 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? p>
5 Réponses :
Vous pouvez créer un en-tête personnalisé en effectuant un 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 qtablowwidgetem code>, puis à l'aide de la
SéthorizontalheaderItem () code>. 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 code> pour plusieurs colonnes. P>
QTableWidget code> si vous êtes ambitieux. P>
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. P>
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. P>
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 p> . p> p>
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.
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. P>
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. P>
Voici les premiers résultats DataframeLodel . UPD: C'est assez lent avec de gros dataframes p>
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);
}
Veuillez ajouter plus de détails pour développer votre réponse, telle que le code de travail ou les citations de documentation.