2010-02-04 6 views
7

J'essaye de construire programmaticaly (avec Qt 4.6) une fenêtre contenant une série de QPushButton, tous emballés ensemble. Il devrait ressembler si (que j'appelle une boîte à outils):Supprimer tous les espaces dans QGridLayout

toolbox image http://img99.imageshack.us/img99/9853/examplezk.png

Alors, je créé une classe de boîte à outils, provenant de QWidget, qui a le constructeur suivant:

Toolbox::Toolbox (void) 
    : QWidget (0, Qt::Tool) 
{ 
    setWindowTitle (tr ("Toolbox")); 

    QGridLayout *group = new QGridLayout (this); 
    group->setSpacing (0); 
    group->setContentsMargins (0, 0, 0, 0); 
    group->setSizeConstraint (QLayout::SetFixedSize); 
    setLayout (group); 

    unsigned k = 0; 
    QPushButton *buttons = new QPushButton[6]; 
    for (unsigned i = 0; i < 3; i++) 
    for (unsigned j = 0; j < 2; j++) 
    { 
     buttons[k].setIcon (QIcon ("test.png")); 
     buttons[k].setIconSize (QSize (32, 32)); 
     buttons[k].setContentsMargins (0, 0, 0, 0); 
     buttons[k].setCheckable (true); 
     buttons[k].setAutoExclusive (true); 

     group->addWidget (&buttons[k], i, j); 
     k++; 
    } 
    buttons[1].setChecked (true); 

D'une certaine façon, il ne fonctionne pas et mes boutons ne finissent pas emballés ensemble:

result http://img9.imageshack.us/img9/774/resultr.png

Je ne peux pas réussi à supprimer ce ve espacement (et les marges entourant l'ensemble du tableau). Toute aide est la bienvenue.

Répondre

1

Apparemment, cela est considéré comme une chose normale: voir le bug report correspondant, qui a été fermé. La solution de contournement rapportée là ne semble pas fonctionner pour moi.

+0

Le lien est maintenant mort. – Trilarion

+0

Lien de travail: https://bugreports.qt.io/browse/QTBUG-2699 – Taran

0

Étant donné que vous avez défini la contrainte de taille sur la mise en page sur QLayout::SetFixedSize, Qt utilisera l'indicateur de taille du widget en tant que taille fixe. Vous devrez peut-être remplacer QWidget::sizeHint() dans la classe Toolbox pour que le widget soit exactement aussi grand qu'il doit l'être pour s'adapter à tous les boutons (dans le cas de vos six boutons, la largeur serait de 64 et la hauteur de 96).

+0

Hum, j'ai bien peur que ça ne joue pas. J'ai ajouté un Toolbox :: sizeHint(), mais il n'est pas appelé. –

+0

Toolbox :: sizeHint() est appelée quand je l'essaie. Il n'est pas appelé quand j'oublie d'en faire une fonction membre const. Vous devrez probablement aussi changer de style comme le suggère PiedPiper. –

+0

OK, à droite, un autre cas d'édition et de compilation de différents fichiers, désolé. (J'ai obtenu le droit 'const', cependant.) Cependant, même lorsqu'il est appelé, il peut le faire retourner n'importe quel QSize que je veux, et je ne change pas l'apparence du tout. Enfin, en ce qui concerne le réglage du style, si je fais cela alors aucun autre tour est nécessaire (mais c'est moche). –

0

Si vous utilisez le style plastique qui est maintenant standard dans Qt4.6, les bordures de QPushButtons sont dessinées à l'intérieur du widget. Essayez d'utiliser l'un des autres styles. .: par exemple

#include <QGtkStyle> 

QApplication a(argc, argv, true); 
a.setStyle("gtk"); 

Un style peut également être mis sur un widget de personne en utilisant la fonction QWidget :: setStyle().

+0

Je travaille sur Mac OS, donc je n'utilise pas de plastique. En fait, mettre le style en plastique permet de dessiner des widgets emballés ensemble. Cependant, cela leur donne un look extraterrestre, donc je serais toujours heureux d'avoir une solution avec le type natif. –

Questions connexes