gpt4 book ai didi

qt - 在 dropEvent 中删除 QFrame 子类时,内部 QMutex::lock 崩溃

转载 作者:行者123 更新时间:2023-12-01 23:42:58 24 4
gpt4 key购买 nike

我正在使用 OpenSUSE Linux 使用 C++ 进行编码,并使用 Qt Creator 作为我的 IDE。

我有一个名为 InteractiveQFrame 子类,它是另一个名为 WindowQFrame 子类的父类。在Window::dropEvent中,我想删除event->source,它是一个Interactive对象。所以我有这样的设置:

void Window::dropEvent(QDropEvent *event) {

//after identifying MIME type as an Interactive object:

Interactive *temp = (qobject_cast<Interactive*>(event->source()));
temp->deleteLater();

}

然后通常没问题,直到我尝试在程序中执行其他操作,然后我得到以下结果:

(gdb) bt
0 0xf5df218f in QMutex::lock() () from /space/cp/x86/qt/lib/libQtCore.so.4
1 0xf5f05b27 in QCoreApplication::postEvent(QObject*, QEvent*, int) () from /space/cp/x86/qt/lib/libQtCore.so.4
2 0xf5f05e5c in QCoreApplication::postEvent(QObject*, QEvent*) () from /space/cp/x86/qt/lib/libQtCore.so.4
3 0xf5f15ce7 in QObject::deleteLater() () from /space/cp/x86/qt/lib/libQtCore.so.4
4 0xf62ccb00 in ?? () from /space/cp/x86/qt/lib/libQtGui.so.4
5 0xf62b31d2 in QApplication::x11ClientMessage(QWidget*, _XEvent*, bool) () from /space/cp/x86/qt/lib/libQtGui.so.4
6 0xf62bfd04 in QApplication::x11ProcessEvent(_XEvent*) () from /space/cp/x86/qt/lib/libQtGui.so.4
7 0xf62e834f in ?? () from /space/cp/x86/qt/lib/libQtGui.so.4
8 0xf5f0480a in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /space/cp/x86/qt/lib/libQtCore.so.4
9 0xf5f04c52 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /space/cp/x86/qt/lib/libQtCore.so.4
10 0xf5f06f69 in QCoreApplication::exec() () from /space/cp/x86/qt/lib/libQtCore.so.4
11 0xf6238887 in QApplication::exec() () from /space/cp/x86/qt/lib/libQtGui.so.4
12 0x0805d028 in main (argc=138177832, argv=0x83cf3b0) at /home/bbayes/DspGUI/main.cpp:10

我的任何代码都不会再次引用被删除的Interactive。这个错误看起来完全是 Qt 内部的错误。我在网上查了一下,但找不到类似的示例或解决方案。有谁知道如何解决这个问题吗?

最佳答案

Qt 文档说 qobject_cast:

如果给定对象属于 T 类型(或子类),则返回转换为 T 类型的给定对象;否则返回 0。

在尝试删除对象之前检查您的类型转换是否有效:

Interactive *temp = (qobject_cast<Interactive*>(event->source()));
if (temp != NULL)
{
temp->deleteLater();
}

关于qt - 在 dropEvent 中删除 QFrame 子类时,内部 QMutex::lock 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com