Qt-Advanced-Docking-System 缺陷记录以及解决

本文记录了QtAdvancedDockingSystem中关于‘DetachGroup’控件导致程序崩溃的问题,通过重新编译并调整配置解决了该问题,重点在于代码更新和编译设置的更改。

2024.3.21记录缺陷

点击可驻留的控件“Detach Group”之后,再操作该控件,会导致程序崩溃,临时解决方案,取消脱离使能

DockWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);

DockWidget 为  new ads::CDockWidget("xxx") 对象

操作方法:窗口浮动后,再将窗口dock(停靠)到主界面上,发现程序崩溃,操作的窗口标题(tab)显示在dock位置的中部。


2024.5.14记录措施

解决方法:

重新拉取代码,代码位置GitHub - githubuser0xFFFF/Qt-Advanced-Docking-System: Advanced Docking System for Qt

重新编译前设置:

src.pro中处理,注释去掉作者的DESTDIR = $${ADS_OUT_ROOT}/lib

新增生成路径,区分了MSVC与mingGW

ADS_OUT_ROOT = $${OUT_PWD}/..
CONFIG += c++14
CONFIG += debug_and_release
TARGET = $$qtLibraryTarget(qtadvanceddocking)
DEFINES += QT_DEPRECATED_WARNINGS
TEMPLATE = lib
#DESTDIR = $${ADS_OUT_ROOT}/lib  #注释掉
QT += core gui widgets

!adsBuildStatic {
	CONFIG += shared
    DEFINES += ADS_SHARED_EXPORT
}
adsBuildStatic {
	CONFIG += staticlib
    DEFINES += ADS_STATIC
}

windows {
	# MinGW
	*-g++* {
		QMAKE_CXXFLAGS += -Wall -Wextra -pedantic
        target.path = $$PREEFIX/lib_MinGW
        CONFIG(debug,debug|release){
            #调试版本
            DESTDIR = $${ADS_OUT_ROOT}/lib_MinGW/Debug
        }
        CONFIG(release,debug|release){
            #发布版本
            DESTDIR = $${ADS_OUT_ROOT}/lib_MinGW/Release
        }
	}
	# MSVC
	*-msvc* {
        QMAKE_CXXFLAGS += /utf-8
        target.path = $$PREEFIX/lib_MSVC
        CONFIG(debug,debug|release){
            #调试版本
            DESTDIR = $${ADS_OUT_ROOT}/lib_MSVC/Debug
        }
        CONFIG(release,debug|release){
            #发布版本
            DESTDIR = $${ADS_OUT_ROOT}/lib_MSVC/Release
        }
     }
}

注释掉之前的代码中以下语句

DockWidget->setFeature(ads::CDockWidget::DockWidgetFloatable, false);

问题分析:

之前拉取的代码日期是2024.3.21(错误源已不可考,不知道是从哪个copier弄的,初学)

新拉取的代码日期是2024.5.14(原作者提供的源) 作者重新更新修复了Bug,问题解决,完美实现dock停靠以及浮动。

资源位置:(为csdn链接)

https://download.youkuaiyun.com/download/tangchao340/89305841

csdn链接下面备注了github链接位置,请不要捐赠积分。


2024.5.17记录(代码调用顺序)

使用代码顺序

this->setCentralWidget(Q_NULLPTR);

m_dockManager = new ads::CDockManager(this);

setTabPosition(Qt::AllDockWidgetAreas,QTabWidget::North);

qRegisterMetaType<QDockWidget::DockWidgetFeatures>();

释放方法

官方例子中的推荐(20240613增加)

//============================================================================
void CMainWindow::closeEvent(QCloseEvent* event)
{
    // Delete dock manager here to delete all floating widgets. This ensures
    // that all top level windows of the dock manager are properly closed
    DockManager->deleteLater();
	QMainWindow::closeEvent(event);
}

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值