2015-08-27 2 views
0

я получил следующее расположение (оригинал here):Qt нечетного макет расположение

test_image

Пяти unconvencional кнопки unsual размера (ш: 400, ч: 300), и они расположены INT следующим образом: четыре квадратный режим (два сверху и два при буттоме), плотно сложенные, и пятая кнопка в центре, перекрывающая инкремент остальных четырех кнопок. Я хотел бы знать, есть ли какой-либо макет (gridlayout, макет формы и т. Д.), Который я могу использовать, чтобы сохранить эту компоновку, когда я расширяю, увеличиваю и/или сворачиваю окно? Спасибо за любую помощь.

ответ

0

Используйте QGridLayout с размером 4x4. Затем заставьте каждую кнопку использовать ячейки сетки 2x2, которые вы можете использовать, используя правый QGridLayout::addWidget() overload. Там дают columnSpan и rowSpan из 2.

+0

Я попробую. Спасибо – guilhermemfreire

0

(звучит как домашнее задание вопрос.)

Мой первый подход, чтобы просто родителю второй виджет первого виджета после установки макета сетки. Затем вы должны получить второй виджет для изменения размера с первым. Я делал это в прошлом с pop up dialogs in iOS.

@ Решение hyde намного более изящно подходит для решения проблемы. Я поместил все в кучу, но для такого простого приложения все можно было положить в стек вместо этого (QWidget * w = new QWidget(); =>QWidget w;).

#include <QApplication> 
#include <QWidget> 
#include <QGridLayout> 
#include <QPushButton> 
#include <QList> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QWidget * w = new QWidget(); 

    QGridLayout * grid = new QGridLayout(); 

    QList <QPushButton *> buttons; 
    for(int i = 0; i< 5; i++) 
    { 
     buttons.append(new QPushButton("Button "+ QString::number(i+1))); 
     buttons.last()->setFixedSize(400, 300); 
    } 

    grid->addWidget(buttons.at(0),0,0,2,2);// upper left 
    grid->addWidget(buttons.at(1),0,2,2,2);// upper right 
    grid->addWidget(buttons.at(2),2,0,2,2);// lower left 
    grid->addWidget(buttons.at(3),2,2,2,2);// lower right 
    grid->addWidget(buttons.at(4),1,1,2,2);// centered 

    w->setLayout(grid); 

    w->show(); 

    return a.exec(); 
} 

Если вы хотите элементы сетки, чтобы оставаться в центре и не имеют пробелы, когда вы отрегулировать размер сетки, убедитесь, что вы добавить буфера строк/COL вокруг снаружи, и установите значение растягивания для них. Как в этом example.

Надеюсь, что это поможет.

+0

Спасибо за ответ. Я попробую это, дайте знать. – guilhermemfreire