12
votes

Pourquoi qhboxlayout est-il causant des widgets à chevaucher?

Je dois placer plusieurs instances d'un qpushbutton Sous-classe adjacente à l'autre. Pour une raison quelconque, les boutons se chevauchent les uns des autres lorsqu'ils sont peints. Un exemple simplifié du problème est ci-dessous.

Voici la sortie (incorrecte):

chevauchement

voici le code: xxx

Qu'est-ce qui cause cela, et comment puis-je le réparer? BTW, j'ai essayé quelque chose de similaire avec des sous-classes régulières qwidget (au lieu de qpushbutton sous-classes), et il n'y a pas de problème. C'est quelque chose de particulier à qpushbutton .

update: Je pense vraiment maintenant que ceci est un bug. Je l'ai soumis au tracker de bogues QT ; Nous verrons ce que pensent les trolls. Dans tous les cas, dérivé de qabstractbutton corrige le problème de dessin ... Je devais simplement ré-implémenter certaines des fonctionnalités dont j'avais besoin.

update 2: les trolls à Qt ont fourni une solution (solution de contournement?); J'ai posté leur correctif comme une réponse ci-dessous. Je quitte leur équipe pour déterminer s'il s'agit d'une fonctionnalité ou d'un bug. Apparemment ne se comporte apparemment différemment sur le Mac.


7 commentaires

Je ne vois rien qui fixe la taille de votre bouton-poussoir. Vous spécifiez qu'il sera corrigé et le sizehint, mais pas la taille réelle. Le faites-vous dans votre code réel ou pas?


@Live: Mais n'est-ce pas le point de la qhboxlayout? N'est-il pas censé utiliser les indications de taille pour déterminer la taille idéale pour chaque widget? (Autoriser certains d'élargir / contracter si l'indice de taille et la stratégie permettent, par exemple.)


@Live: J'ai vérifié que les tailles sont ok. Si vous faites une taille Qdebug () << (), il est correct.


Que fait-il si vous étirez votre fenêtre (pouvez-vous?)


@Live: Si vous étirez la fenêtre, les marges entre les boutons se développent et les boutons restent la taille fixe. Si vous faites une mise en page-> addstretch (1), les boutons se chevauchent. Il est presque comme si la mise en page Calculez incorrectement la taille nécessaire pour tous les boutons. Je peux soumettre cela comme un bogue.


J'ai eu la chance de tester votre code ce soir. Il compile et fonctionne correctement sur Windows 7 avec Qt 4.6.2 et sous Linux avec Qt 4.5.3. Donc, j'ai supprimé ma réponse précédente. Donc, il peut s'agir d'un bug sous MacOS. Pouvez-vous indiquer la version de OS et QT?


@Nold: Je suis sur Mac OS X 10.6.4; Qt 4.7.0


3 Réponses :


0
votes

au lieu d'appeler SetSizePolicy () et Reimplément Sizehint (), je vais essayer de simplement appeler

setfixedSize (50, 25)

dans votre constructeur. Cela devrait mettre à jour le sizehint seul.

J'espère que cela aide.


1 commentaires

setfixedSize provoque le même comportement. Je commence vraiment à penser que ceci est juste un bug.



0
votes

Votre code fonctionne bien pour moi. Je l'ai testé. Quelle version utilisez-vous? J'utilise qt 4.6.3 et ça va bien.


2 commentaires

Je suis sur Mac OS X 10.6.4; Qt 4.7.0


Je pense que c'est le problème. Oui peut être c'est un bug.



12
votes

La solution consiste à ajouter ce qui suit à la sous-classe: xxx

apparemment, il n'est nécessaire que sur la plate-forme Mac; Windows et Linux affichent la disposition comme prévu.


1 commentaires

@ CHACHAM15: Vous pouvez l'ajouter au constructeur de la sous-classe, le mybutton dans mon exemple ci-dessus.