Skip to content

使用代理框架+自定义dockwidget崩溃 #217

Open

Description

@zhengxuejin-ai

作者你好,如题。
我使用代理框架(QWKExample_MainWindow)为前提。
1,直接使用一个派生自QDockWidget的dock,程序一切正常。
2,使用一个派生自QDockWidget的dock,但在这个dock的构造函数中使用了WidgetWindowAgent(new setup),发现如下两个问题(都是针对派生自QDockWidget的dock)。
2.1假如我没有自定义标题栏widget,程序运行后,可以将dock拖出来(因为没有自定义标题栏,所以拖出来就托不回去了),这个时候,主框架还是可以拖动的。但如果拖出来不松手再拖回去,程序直接崩溃。
2.2假如我使用了自定义的标题栏(WindowBar),程序运行后,将dock拖出来,这个时候,主框架已经没有相应了(如何点,拖,都不带动的),鼠标也变成了一个不正常的样子。同时拖动感觉不顺滑,迟滞感比较强。然后再将dock拖回去,这个时候就崩溃了。
崩溃点如下:C:\Qt\6.10.1\msvc2022_64\include\QtCore\qscopedpointer.h,文件112行
T *get() const noexcept
{
return d;
}
2.1的崩溃地也是这里,调用堆栈如下:

Qt6Guid.dll!QScopedPointer<QObjectData,QScopedPointerDeleter>::get() 行 112 C++
Qt6Guid.dll!qGetPtrHelper<QScopedPointer<QObjectData,QScopedPointerDeleter> const>(const QScopedPointer<QObjectData,QScopedPointerDeleter> & ptr) 行 137 C++
Qt6Guid.dll!QWindow::d_func() 行 65 C++
Qt6Guid.dll!QWindow::handle() 行 2201 C++
QtTest.exe!QWK::forwardFilteredEvent(QWindow * window, HWND__ * hWnd, unsigned int message, unsigned __int64 wParam, __int64 lParam, int64 * result) 行 464 C++
QtTest.exe!QWKHookedWndProc(HWND
* hWnd, unsigned int message, unsigned __int64 wParam, int64 lParam) 行 627 C++
[外部代码]
Qt6Cored.dll!QEventDispatcherWin32::processEvents(QFlags flags) 行 502 C++
Qt6Guid.dll!QWindowsGuiEventDispatcher::processEvents(QFlags flags) 行 36 C++
Qt6Cored.dll!QEventLoop::processEvents(QFlags flags) 行 105 C++
Qt6Cored.dll!QEventLoop::exec(QFlags flags) 行 186 C++
Qt6Cored.dll!QCoreApplication::exec() 行 1452 C++
Qt6Guid.dll!QGuiApplication::exec() 行 1974 C++
Qt6Widgetsd.dll!QApplication::exec() 行 2576 C++
QtTest.exe!main(int argc, char * * argv) 行 35 C++
QtTest.exe!qtEntryPoint() 行 45 C++
QtTest.exe!WinMain(HINSTANCE
* formal, HINSTANCE * __formal, char * __formal, int __formal) 行 64 C++
谢谢。

Activity

  1. added theissue type on Feb 4, 2026
  2. self-assigned this
    on Feb 4, 2026
  3. wangwenx190 commented on Feb 4, 2026

    @wangwenx190
    Collaborator

    你好,经我们研究,QDockWidget自身的逻辑与QWK不能很好的兼容,因此QWK短时间内不会支持QDockWidget。而且QDockWidget本身不需要使用QWK吧?Qt官方有提供给它定制标题栏的接口,你可以直接用Qt提供的接口去做,没必要用QWK的。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingwontfixThis will not be worked on

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions