Добавление дочернего элемента в QMainWindow
Как я могу добавить двух детей Widget
объекты в равной части QMainWindow
,
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{ TreeArea *ta= new TreeArea(this);
TreeArea *ta1= new TreeArea(this);
.
.
.
TreeArea::TreeArea(QWidget *parent) :
QWidget(parent)
{
.
.
.
3 ответа
Решение
Как e-цинк предложил вам использовать макет. Скажем, вы хотите вставить два виджета в главное окно.
QHBoxLayout *layout = new QHBoxLayout;
QPushButton *button1 = new QPushButton("button1");
QPushButton *button2 = new QPushButton("button2");
layout->addWidget(button1);
layout->addWidget(button2);
setCentralWidget(new QWidget);
centralWidget()->setLayout(layout);
Это позволит расположить виджеты горизонтально, и вы получите такой результат:
И если вы хотите расположить их вертикально, используйте QVBoxLayout
Я настоятельно рекомендую прочитать документацию. Управление раскладкой в Qt
Использование QMainWindow::setCentralWidget(QWidget *)
добавить свой собственный контроль.
////////если вы хотите создать из main.cpp////////
#if 0
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QMainWindow* MainWindow = new QMainWindow(NULL);
QWidget* cwidget = new QWidget(MainWindow);
QPushButton* button1 = new QPushButton(cwidget);
QPushButton* button2 = new QPushButton(cwidget);
button1->setText("Button1");
button2->setText("Button2");
button1->move(10, 100);
button2->move(10, 200);
MainWindow->setCentralWidget(cwidget);
MainWindow->resize(400, 300);
MainWindow->show();
return app.exec();
}
#else
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
QMainWindow* MainWindow = new QMainWindow(NULL);
QWidget* cwidget = new QWidget(MainWindow);
QHBoxLayout* layout = new QHBoxLayout; //horizontal layout
QPushButton* button1 = new QPushButton("button1");
QPushButton* button2 = new QPushButton("button2");
layout->addWidget(button1);
layout->addWidget(button2);
MainWindow->setCentralWidget(cwidget);
MainWindow->centralWidget()->setLayout(layout); //centralWidget() is getcentralWidget()
MainWindow->resize(400, 300);
MainWindow->show();
return app.exec();
}
#endif