Skip to content

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

@zhengxuejin-ai

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++
谢谢。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions