|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() ![]() David ShotIngénieur développement logiciels Inscription : août 2008 Messages : 206 ![]() |
Bonjour,
Je créé un QTreeWidget contenant un QTableWidget. Dans le cas ou le contenu d'une cellule de la table est sur plusieurs lignes, lorsque je déplie la première fois le niveau contenant cette table, la hauteur de celle-ci est mal calculée, car elle ne prend pas en compte la largeur des colonnes définis dans le resizeEvent. La hauteur de la table est donc trop grande. Alors que les fois suivantes, cette hauteur est bien calculée. J'ai réimplémenté sizeHint et minimumSizeHint pour recalculer cette hauteur, mais la première fois la méthode rowHeight est calculée en prenant en compte une largeur de 100 pixels (taille par défaut d'un widget), et ensuite la bonne largeur de la table est prise en compte, pour calculer la hauteur de la table. Y a t-il un moyen de calculer correctement cette hauteur à la première ouverture ? Merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 |
![]() ![]() Ingénieur développement logiciels Inscription : mai 2009 Messages : 967 ![]() |
Bonjour,
Tu n'aurais pas un petit projet d'exemple à rajouter en pièce-jointe ? Notamment pour le multi-ligne dans la QTableWidget, qui n'est pas trivial. |
|
|
00
|
|
|
#3 | ||||||
|
Membre éclairé
![]() ![]() David ShotIngénieur développement logiciels Inscription : août 2008 Messages : 206 ![]() |
Bonjour,
voici quelques éléments supplémentaires pour enrichir la description de mon problème : Le constructeur de ma table : Code :
Code :
Code :
Cordialement, David |
||||||
|
|
00
|
|
|
#4 | ||||
![]() ![]() Ingénieur développement logiciels Inscription : mai 2009 Messages : 967 ![]() |
Bonsoir,
Je n'ai toujours pas trop d'idée pour reproduire le problème, mais l'essentiel est bien de savoir quel signal ou événement intercepter et comment y réagir. "Intercepter" un signal = le connecter à un slot Intercepter un événement = installer un filtre. Réagir après un événement intercepté = QApplication::postEvent() (je ne sais pas si c'est propre...) Du coup en pièce jointe voici un projet d'exemple. Pour imiter le problème, je retaille les sections verticales (= j'agrandis/diminue la hauteur d'une ligne), et on constate que l'item de l'arbre n'est pas retaillé, soit une scrollbar apparait, soit il y a du blanc dessous. 2 lignes sont commentées dans le code, si tu les décommentes, tu verras que dans ce cas précis cela résout le problème. Code :
table->viewport()->installEventFilter ( this ); Code :
Code :
connect ( verticalHeader(), SIGNAL ( sectionResized ( int, int, int ) ), this, SLOT ( updateSize() ) ); // constructeur de TableWidget Code :
Je pense qu'il y a moyen de faire plus propre quand même... Si ça ne t'aide pas, est-ce que tu peux compléter le projet d'exemple avec un delegate de façon à reproduire ton problème plus exactement ? |
||||
|
|
10
|
|
|
#5 | ||
|
Membre éclairé
![]() ![]() David ShotIngénieur développement logiciels Inscription : août 2008 Messages : 206 ![]() |
Bonjour,
merci Troudhyl, j'ai suivis tes conseils. Pour cela, j'ai donc ajouté la ligne suivante à mon constructeur : Code :
viewport()->installEventFilter ( this ); Code :
David. |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() Ingénieur développement logiciels Inscription : mai 2009 Messages : 967 ![]() |
Du coup si tu le fais au niveau de la table, tu pouvais faire directement :
Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com