2010-02-04 13 views
7

Estoy tratando de construir programmaticaly (con Qt 4.6) una ventana que contiene una serie de QPushButton, todos juntos. Debe quedar como así (lo que yo llamo una caja de herramientas):Eliminar todos los espacios en QGridLayout

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

tanto, he creado una clase de herramientas, que deriva de QWidget, que tiene el siguiente constructor:

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); 

De alguna manera, no funciona y mis botones no terminen embaladas en común:

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

no consigo eliminar esta ve espaciado rtical (y los márgenes que rodean la matriz completa). Cualquier ayuda es bienvenida.

Respuesta

1

Aparentemente, esto se considera una cosa normal: vea el bug report correspondiente, que se cerró. La solución informó que no parece funcionar para mí.

+0

El enlace ahora está muerto. – Trilarion

+0

Enlace de trabajo: https://bugreports.qt.io/browse/QTBUG-2699 – Taran

0

Dado que ha establecido la restricción de tamaño en el diseño en QLayout::SetFixedSize, Qt utilizará la sugerencia de tamaño del widget como su tamaño fijo. Es posible que deba sobrescribir QWidget::sizeHint() en la clase Toolbox para hacer que el widget sea exactamente tan grande como debe ser para ajustarse a todos los botones (en el caso de sus seis botones, el ancho sería 64 y la altura sería 96).

+0

Hum, me temo que no entra en juego. Agregué un Toolbox :: sizeHint(), pero no se llama. –

+0

Toolbox :: sizeHint() se llama cuando lo intento. No se llama cuando me olvido de convertirlo en una función miembro miembro. Probablemente también deba cambiar el estilo como sugiere PiedPiper. –

+0

OK, a la derecha, otro caso de edición y compilación de diferentes archivos, lo siento. (Obtuve el 'const' correcto, sin embargo). Sin embargo, incluso cuando se llama, puede hacer que devuelva el QSize que desee, y no cambio la apariencia en absoluto. Finalmente, con respecto a la configuración del estilo, si hago eso, entonces no se necesita ningún otro truco (pero es feo). –

0

Si está utilizando el estilo plastique que ahora es estándar en Qt4.6, los bordes de QPushButtons se dibujan dentro del widget. Intenta usar uno de los otros estilos. ej .:

#include <QGtkStyle> 

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

Un estilo también se puede establecer en un widget de individuo usando la función QWidget :: setStyle().

+0

Estoy trabajando en Mac OS, así que no estoy usando plastique. En realidad, establecer el estilo en plastique hace que dibuje widgets empaquetados. Sin embargo, esto les da una apariencia extraterrestre, por lo que aún recibiría una solución con el tipo nativo. –

Cuestiones relacionadas