首页 > 其他分享 >qt停靠窗口 使用qt提供的停靠窗口框架 qtadvanceddocking (保存当前的位置信息,再次打开软件恢复上次的位置)

qt停靠窗口 使用qt提供的停靠窗口框架 qtadvanceddocking (保存当前的位置信息,再次打开软件恢复上次的位置)

时间:2024-05-06 19:44:05浏览次数:17  
标签:窗口 qt CDockWidget VERSION 停靠 CMAKE new include MainWindow

 

cmakeLists.txt:

cmake_minimum_required(VERSION 3.5)

project(Toolkit VERSION "1.0.0.0" LANGUAGES CXX)

option(version 1.0.0.0)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets PrintSupport)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets PrintSupport)

include(load.cmake)

file(GLOB MainWindow ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow/*.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow/*.h ${CMAKE_CURRENT_SOURCE_DIR}/MainWindow/*.ui)

include_directories("${QTADVANCEDDOCKING_DIR}/include")

set(PROJECT_SOURCES
        main.cpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(TF_SoftwareToolkit
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Toolkit APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(Toolkit SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(TF_SoftwareToolkit
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(Toolkit
    PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::PrintSupport
    hidapi
    qtadvanceddocking

)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.TF_SoftwareToolkit)
endif()
set_target_properties(Toolkit PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS Toolkit
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Toolkit)
endif()

头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QShowEvent>
#include <DockManager.h>
#include <DockAreaWidget.h>
#include <DockWidget.h>
#include <QSettings>

#include "AutoHideDockContainer.h"
#include "DockAreaWidget.h"
#include "DockAreaTitleBar.h"

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public:
    //void saveState();
private:
    Ui::MainWindow *ui;

    ads::CDockManager* DockManager;
    ads::CDockAreaWidget* StatusDockArea;
    ads::CDockWidget* TimelineDockWidget;
    ads::CDockAreaWidget* temp;
};
#endif // MAINWINDOW_H

 

cpp文件:

#include "mainwindow.h"
#include "./ui_mainwindow.h"

using namespace ads;
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    , m_deviceinfowidget(new DeviceInfoWidget)
    , m_elasticWaveformWidget(new ElasticWaveformWidget)
    , m_forceWaveformWidget(new ForceWaveformWidget)
    , m_gestureParameterWidget(new GestureParameterWidget)
    , m_logWidget(new LogWidget)
{
    ui->setupUi(this);

    QString version = QCoreApplication::applicationVersion();
    QString verInfo = " 钛方标准化软件工具 - 版本:V" + QString("1.0.0.0")
                      + QString((version.right(1) != "0") ? " debug" : " release");
    this->setWindowTitle(verInfo);

    CDockManager::setConfigFlag(CDockManager::OpaqueSplitterResize, true);
    CDockManager::setConfigFlag(CDockManager::XmlCompressionEnabled, false);
    CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
    CDockManager::setAutoHideConfigFlags(CDockManager::DefaultAutoHideConfig);
    DockManager = new CDockManager(this);


    //0窗口
    CDockWidget* 0CDockWidget= new CDockWidget("产品信息");
    0CDockWidget->setWidget(0widget);
    auto* 0DockWidgetArea = DockManager->addDockWidget(DockWidgetArea::OuterDockAreas,0CDockWidget);
    //deviceInfoDockWidgetArea->setMaximumWidth(250);
    ui->menuView->addAction(deviceInfoCDockWidget->toggleViewAction());

    // 1窗口
    CDockWidget* 1CDockWidget= new CDockWidget("日志");
    1CDockWidget->setWidget(1Widget);
    auto* 1DockWidgetArea = DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea,1CDockWidget,1DockWidgetArea);
    //logDockWidgetArea->setMaximumWidth(250);
    ui->menuView->addAction(1CDockWidget->toggleViewAction());

    // 2窗口
    CDockWidget* 2mCDockWidget= new CDockWidget(1窗口");
    2CDockWidget->setWidget(2Widget);
    auto* 2DockWidgetArea = DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea,2CDockWidget);
    ui->menuView->addAction(2CDockWidget->toggleViewAction());

    // 3窗口
    CDockWidget* 3DockWidget= new CDockWidget("2窗口");
    3CDockWidget->setWidget(3Widget);
    DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea,3CDockWidget,2DockWidgetArea);
    ui->menuView->addAction(3CDockWidget->toggleViewAction());

    // 4窗口
    CDockWidget* 4CDockWidget= new CDockWidget("3窗口");
    4CDockWidget->setWidget(m4Widget);
    DockManager->addDockWidget(DockWidgetArea::RightDockWidgetArea,4CDockWidget);
    ui->menuView->addAction(4CDockWidget->toggleViewAction());



    QSettings Settings("Settings.ini", QSettings::IniFormat);
    this->restoreGeometry(Settings.value("mainWindow/Geometry").toByteArray());
    this->restoreState(Settings.value("mainWindow/State").toByteArray());
    DockManager->restoreState(Settings.value("mainWindow/DockingState").toByteArray());
}

MainWindow::~MainWindow()
{
    delete ui;
    QSettings Settings("Settings.ini", QSettings::IniFormat);
    Settings.setValue("mainWindow/Geometry", this->saveGeometry());
    Settings.setValue("mainWindow/State", this->saveState());
    Settings.setValue("mainWindow/DockingState", DockManager->saveState());
}

 

标签:窗口,qt,CDockWidget,VERSION,停靠,CMAKE,new,include,MainWindow
From: https://www.cnblogs.com/RedWetPlace/p/18175712

相关文章

  • Qt中向项目中添加资源文件
      添加前缀和文件  注意images文件夹要在项目子路径下 然后保存即可 ......
  • pyqt5设计图片背景和颜色
        tianqi.qrc 根据大小重新 <RCC><qresourceprefix="media"><file>天气.jpg</file><file>音乐.jpg</file><file>map.png</file><file>车.png</file></qresource></RCC>......
  • Qt/C++音视频开发72-倍速推流/音视频同步倍速推流/不改变帧率和采样率/低倍速和高倍速
    一、前言最近多了个新需求,需要倍速推流,推流界的扛把子obs也有倍速推流功能,最高支持到两倍速。这里所说的倍速,当然只限定在文件,只有文件才可能有倍速功能,因为也只有文件才能倍速解码播放。实时视频流是不可能倍速的,因为没有时长,有时长的才可以按照播放进度来。是否是文件也不能通......
  • ubuntu_24.04 Noble LTS安装docker desktop启动无窗口及引擎启动失败的解决方法
    ubuntu_24.04LTS安装dockerdesktop启动无窗口及引擎启动失败的解决方法1.安装dockerdesktop后启动无窗口现象:执行sudoaptinstall./docker-desktop-4.29.0-amd64.deb成功安装dockerdesktop后,无论是在菜单里点击DockerDesktop图标还是执行systemctl--userstartdocker......
  • 窗口的扩展风格和基本风格
    1.DWORDdwExStyle//窗口的扩展风格(加强版专有)指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):WS_EX_ACCEPTFILES 指定此样式创建一个窗口接受拖放文件。WS_EX_APPWINDOW 当窗口可见时布置一个顶级窗口到任务栏上。WS_EX_CLIENTEDGE 指定窗口具有三维外观——......
  • 窗口的扩展风格和基本风格
    1.DWORDdwExStyle//窗口的扩展风格(加强版专有)指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):WS_EX_ACCEPTFILES 指定此样式创建一个窗口接受拖放文件。WS_EX_APPWINDOW 当窗口可见时布置一个顶级窗口到任务栏上。WS_EX_CLIENTEDGE 指定窗口具有三维外观——......
  • 窗口的扩展风格和基本风格
    1.DWORDdwExStyle//窗口的扩展风格(加强版专有)指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):WS_EX_ACCEPTFILES 指定此样式创建一个窗口接受拖放文件。WS_EX_APPWINDOW 当窗口可见时布置一个顶级窗口到任务栏上。WS_EX_CLIENTEDGE 指定窗口具有三维外观——......
  • 窗口的扩展风格和基本风格
    1.DWORDdwExStyle//窗口的扩展风格(加强版专有)指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):WS_EX_ACCEPTFILES 指定此样式创建一个窗口接受拖放文件。WS_EX_APPWINDOW 当窗口可见时布置一个顶级窗口到任务栏上。WS_EX_CLIENTEDGE 指定窗口具有三维外观——......
  • 窗口的扩展风格和基本风格
    1.DWORDdwExStyle//窗口的扩展风格(加强版专有)指定扩展的窗口样式。为以下值中的一个或多个(devc++用“|”连接):WS_EX_ACCEPTFILES 指定此样式创建一个窗口接受拖放文件。WS_EX_APPWINDOW 当窗口可见时布置一个顶级窗口到任务栏上。WS_EX_CLIENTEDGE 指定窗口具有三维外观——......
  • Qt学习第一篇(windows下安装和代码规范)
    Qt_1QtCreator是Qt公司生产的IDE。它集成了多个工具,包括代码编辑器、图形UI(GUI)设计器、编译器、调试器、Qt设计器、Qt快速设计器和Qt助手等。QtDesigner帮助设计基于小部件的GUI,而QtQuickDesigner提供了在设计模式下创建和编辑基于QML的GUI的UI。Qt......