I want that widgets contained in QMainWindow occupy all the available space when application starts.
So in QDockWidget 'first' : I want that the vertical layout occupies all the space in the QDockWidget ;
In QDockWidget 'third', I want that the splitter with the two QTableViews occupies all the space in the QDockWidget ;
And finally, I want that the central QTableView occupies all the available space between the left and right dock widgets.
With QtDesigner, I can't achieve this goal. So how could I do that by code please ?
Here is the look the mainwindow has for the moment :
CtdMainWindow.h :
#include <QMainWindow>
#include "QtMainWindowWithDocks.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; // This is the "main window" from the UI XML file
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
//Q_OBJECT
public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
private:
Ui::MainWindow* ui; // Pointer to the UI generated by the XML file and the uic program
};
CtdMainWindow.cpp :
#include "QtMainWindowWithDocks.h"
#include "CtdMainWindow.h"
MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
QtMainWindowWithDocks.h :
/********************************************************************************
** Form generated from reading UI file 'QtMainWindowWithDocks.ui'
**
** Created by: Qt User Interface Compiler version 5.15.13
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTMAINWINDOWWITHDOCKS_H
#define QTMAINWINDOWWITHDOCKS_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QDockWidget>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTableView>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QTableView *tableView;
QMenuBar *menubar;
QStatusBar *statusbar;
QDockWidget *dockWidget;
QWidget *dockWidgetContents;
QWidget *widget;
QVBoxLayout *verticalLayout;
QPushButton *pushButton;
QPushButton *pushButton_2;
QPushButton *pushButton_3;
QDockWidget *dockWidget_2;
QWidget *dockWidgetContents_2;
QDockWidget *dockWidget_3;
QWidget *dockWidgetContents_3;
QSplitter *splitter;
QTableView *tableView_2;
QTableView *tableView_3;
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(936, 767);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
tableView = new QTableView(centralwidget);
tableView->setObjectName(QString::fromUtf8("tableView"));
tableView->setGeometry(QRect(30, 40, 521, 661));
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 936, 21));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
MainWindow->setStatusBar(statusbar);
dockWidget = new QDockWidget(MainWindow);
dockWidget->setObjectName(QString::fromUtf8("dockWidget"));
dockWidgetContents = new QWidget();
dockWidgetContents->setObjectName(QString::fromUtf8("dockWidgetContents"));
widget = new QWidget(dockWidgetContents);
widget->setObjectName(QString::fromUtf8("widget"));
widget->setGeometry(QRect(20, 40, 77, 83));
verticalLayout = new QVBoxLayout(widget);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
verticalLayout->setContentsMargins(0, 0, 0, 0);
pushButton = new QPushButton(widget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
verticalLayout->addWidget(pushButton);
pushButton_2 = new QPushButton(widget);
pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
verticalLayout->addWidget(pushButton_2);
pushButton_3 = new QPushButton(widget);
pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
verticalLayout->addWidget(pushButton_3);
dockWidget->setWidget(dockWidgetContents);
MainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
dockWidget_2 = new QDockWidget(MainWindow);
dockWidget_2->setObjectName(QString::fromUtf8("dockWidget_2"));
dockWidgetContents_2 = new QWidget();
dockWidgetContents_2->setObjectName(QString::fromUtf8("dockWidgetContents_2"));
dockWidget_2->setWidget(dockWidgetContents_2);
MainWindow->addDockWidget(Qt::LeftDockWidgetArea, dockWidget_2);
dockWidget_3 = new QDockWidget(MainWindow);
dockWidget_3->setObjectName(QString::fromUtf8("dockWidget_3"));
dockWidgetContents_3 = new QWidget();
dockWidgetContents_3->setObjectName(QString::fromUtf8("dockWidgetContents_3"));
splitter = new QSplitter(dockWidgetContents_3);
splitter->setObjectName(QString::fromUtf8("splitter"));
splitter->setGeometry(QRect(10, 0, 141, 691));
splitter->setOrientation(Qt::Vertical);
tableView_2 = new QTableView(splitter);
tableView_2->setObjectName(QString::fromUtf8("tableView_2"));
splitter->addWidget(tableView_2);
tableView_3 = new QTableView(splitter);
tableView_3->setObjectName(QString::fromUtf8("tableView_3"));
splitter->addWidget(tableView_3);
dockWidget_3->setWidget(dockWidgetContents_3);
MainWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget_3);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
dockWidget->setWindowTitle(QCoreApplication::translate("MainWindow", "first", nullptr));
pushButton->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
pushButton_2->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
pushButton_3->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
dockWidget_2->setWindowTitle(QCoreApplication::translate("MainWindow", "second", nullptr));
dockWidget_3->setWindowTitle(QCoreApplication::translate("MainWindow", "third", nullptr));
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // QTMAINWINDOWWITHDOCKS_H
and main.cpp :
#include "CtdMainWindow.h"
int main(int argc, char** argv)
{
QApplication app(argc, argv);
MainWindow window;
window.setVisible(true);
return app.exec();
}