'adding child in QMainWindow
How can i add two child Widget objects in equal portion of QMainWindow.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{ TreeArea *ta= new TreeArea(this);
TreeArea *ta1= new TreeArea(this);
.
.
.
TreeArea::TreeArea(QWidget *parent) :
QWidget(parent)
{
.
.
.
Solution 1:[1]
As e-zinc suggested you have to use layout. Say you want to insert two widgets into the mainwindow.
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);
This will layout widgets horizontally and you will get this result:

And if you want to layout them vertically use QVBoxLayout
I would strongly suggest reading the documentation. Layout Management in Qt
Solution 2:[2]
Use QMainWindow::setCentralWidget(QWidget *) to add your own control.
Solution 3:[3]
////////if you want to create from 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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Neox |
| Solution 2 | NorthCat |
| Solution 3 |
