#include "testing-qt.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include struct QDockInit { QFlags features {QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable}; Qt::DockWidgetArea area{Qt::BottomDockWidgetArea}; Qt::DockWidgetAreas allowed; bool floating {false}; bool visible {true}; QString title {QString::fromUtf8("Not set")}; }; static QDockWidget * setUpNewDockWidget(QMainWindow& main, QMenu& menu, QDockInit init) { static std::size_t counter = 0; QDockWidget * pdock = new QDockWidget(&main); QDockWidget & dock = *pdock; dock.setFeatures(init.features); dock.setFloating( (init.features & QDockWidget::DockWidgetFloatable) ? init.floating : false); dock.setVisible(init.visible); dock.setWindowTitle(init.title); dock.setObjectName(QString{"dock_"}.append(QString::number(counter++)).append("_").append(init.title.toLower())); if(init.features & QDockWidget::DockWidgetClosable) { menu.addAction(dock.toggleViewAction()); //QObject::connect(pdock,&QDockWidget::visibilityChanged,action,&QAction::setChecked); //QObject::connect(action,&QAction::toggled, pdock, &QDockWidget::setVisible); } main.addDockWidget(init.area,&dock); return pdock; } Qt_TestApplication::~Qt_TestApplication() noexcept { QSettings settings(QSettings::IniFormat, QSettings::UserScope,"MyTestComp", "NyTesting"); settings.setValue("geometry", mainWindow.saveGeometry()); settings.setValue("windowstate", mainWindow.saveState()); auto Childlist = mainWindow.children(); qDebug() << Childlist; }; Qt_TestApplication::Qt_TestApplication(int argc, char *argv[]) : QApplication(argc,argv), mainWindow() { mainWindow.setObjectName(QString::fromUtf8("main_window")); mainWindow.layout()->setObjectName(QString::fromUtf8("main_layout")); statusbar = new QStatusBar(&mainWindow); statusbar->setObjectName(QString::fromUtf8("main_status_bar")); mainWindow.setStatusBar(statusbar); menubar = mainWindow.menuBar(); //new QMenuBar(&mainWindow); menubar->setObjectName(QString::fromUtf8("main_menu_bar")); auto viewsmenu = menubar->addMenu(tr("&Views")); // auto logviewaction = viewsmenu->addAction("&Logs"); // logviewaction->setCheckable(true); // logviewaction->setChecked(true); //mainWindow.setCentralWidget(nullptr); mainWindow.setCentralWidget(new QWidget(&mainWindow)); const auto centralWidget = mainWindow.centralWidget(); centralWidget->setObjectName(QString::fromUtf8("central_widget")); centralWidget->hide(); //centralWidget->setMinimumSize(QSize(200,200)); centralWidget->setLayout(new QGridLayout(centralWidget)); auto centralLayout = static_cast(centralWidget->layout()); centralLayout->setObjectName(QString::fromUtf8("central_layout")); mainWindow.setDockOptions(QMainWindow::DockOption::AllowNestedDocks | QMainWindow::DockOption::AllowTabbedDocks | QMainWindow::DockOption::GroupedDragging); logDock = setUpNewDockWidget(mainWindow, *viewsmenu,{.title="Logs"}); logDockWidget = new QWidget(logDock); logDock->setWidget(logDockWidget); logDockWidget->setLayout(new QGridLayout(logDockWidget)); logDockWidget->layout()->setObjectName(QString::fromUtf8("dock_log_widget_layout")); auto tooldock = setUpNewDockWidget(mainWindow, *viewsmenu,{.title="Tools"}); auto toolWidget = new QWidget(tooldock); tooldock->setWidget(toolWidget); toolWidget->setLayout(new QGridLayout(toolWidget)); toolWidget->layout()->setObjectName(QString::fromUtf8("dock_tool_widget_layout")); mainWindow.tabifyDockWidget(logDock, tooldock); // logDock = new QDockWidget(&mainWindow); // logDock->setObjectName(QString::fromUtf8("DockLogView")); // logDock->setFloating(false); // logDock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetVerticalTitleBar); // logDockWidget = new QWidget(logDock); // logDockWidget->setObjectName(QString::fromUtf8("dockWidgetContents_3")); // logDock->setWidget(logDockWidget); // logDock->setWindowTitle(QString::fromUtf8("Logs & Status")); // mainWindow.addDockWidget(Qt::BottomDockWidgetArea, logDock); // logDock->raise(); //Setup Signals. //QObject::connect(logDock,&QDockWidget::visibilityChanged,[logviewaction](bool visible){ logviewaction->setChecked(visible);}); //QObject::connect(logDock,&QDockWidget::visibilityChanged,logviewaction,&QAction::setChecked); //QObject::connect(logviewaction,&QAction::toggled,[this](bool checked){ logDock->setVisible(checked);}); //QObject::connect(logviewaction,&QAction::toggled, logDock, &QDockWidget::setVisible); //QObject::connect(logviewaction,&QAction::checkableChanged,[this](bool checked){ logDock->setVisible(checked);}); QSettings settings(QSettings::IniFormat, QSettings::UserScope,"MyTestComp", "NyTesting"); if(settings.contains("geometry")) { mainWindow.restoreGeometry(settings.value("geometry").toByteArray()); } if(settings.contains("windowstate")) { mainWindow.restoreState(settings.value("windowstate").toByteArray()); } mainWindow.show(); } int main(int argc, char *argv[]) { Qt_TestApplication app(argc,argv); return app.exec(); }