Вы должны использовать макеты. Согласно документации,
Система компоновки Qt предоставляет простой и мощный способ автоматического размещения дочерних виджетов внутри виджета, чтобы убедиться, что они эффективно использовать имеющееся пространство.
Пример:
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
};
widget.cpp
#include "widget.h"
#include <QPushButton>
#include <QHBoxLayout>
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
QPushButton *button1 = new QPushButton("One");
QPushButton *button2 = new QPushButton("Two");
//Horizontal layout with two buttons
QHBoxLayout *hblayout = new QHBoxLayout;
hblayout->addWidget(button1);
hblayout->addWidget(button2);
QPushButton *button3 = new QPushButton("Three");
QPushButton *button4 = new QPushButton("Four");
//Vertical layout with two buttons
QVBoxLayout *vblayout = new QVBoxLayout;
vblayout->addWidget(button3);
vblayout->addWidget(button4);
//We add our two layouts (horizontal & vertical) to the
//following vertical layout.
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addLayout(hblayout);
mainLayout->addLayout(vblayout);
this->setLayout(mainLayout);
}
Widget::~Widget()
{
}