- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 OpenSUSE Linux 使用 C++ 进行编码,并使用 Qt Creator 作为我的 IDE。
我有一个名为 Interactive
的 QFrame
子类,它是另一个名为 Window
的 QFrame
子类的父类。在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/
我正在尝试执行从 QTreeWidget 到 QGraphicsView 的拖放操作。 DragStart() 有效,dragEnterEvent() 有效,但 dropEvent() 从未被调用。另
我正在尝试将一个列表项拖到另一个列表上。 DragEnterEvent 触发得很好,我执行 e.accept(),但是 dropEvent 从不触发。代码如下: class LocalList(QtG
我已经设法在 QPlainTextEdit 上接受放置事件: class PlainTextEdit : public QPlainTextEdit { public: PlainTextEd
我将 QStandardItem 从 QListView 拖到 QWidget 上。在我的 QWidget 类中,我实现了 dragEnterEvent 和 dropEvent: void MyWid
在程序中,我想接受将文件拖放到 QTextExit 中以便编辑文件的某些部分。 拖放工作正常,但是在 QTextEdit 中放置文件后,QTextEdit 的光标会卡住(停止闪烁并且无法再移动). 这
我正在尝试向小型应用程序添加拖放功能。从 QlistWidget 获取数据并将数据拖放到 QTableWidget 上。我应该重写 QTableWidget 的 dropEvent 以便在删除数据时添
我有一个 QTreeView 类,想要在 dropEvent() 事件上设置一个图标。请参阅以下示例: 查看第一个根“主数据”下父级“用户”的图标。我想将用户(例如“user_a”)拖动到“clien
我在做什么/到目前为止我有什么: 我正在使用 Qt-designer 创建 PyQt .ui 文件,我正在使用 QUiLoader 将其加载到我的 python 脚本中,这使我可以访问小部件/组件:
我在做什么/到目前为止我有什么: 我正在使用 Qt-designer 创建 PyQt .ui 文件,我正在使用 QUiLoader 将其加载到我的 python 脚本中,这使我可以访问小部件/组件:
healthPackButton 被放置在 mysquare 上。现在我想给这个按钮添加一个值(因为我有很多 healthPackButtons 并且我希望能够区分它们)。我尝试更改 makeDrag
我正在使用 OpenSUSE Linux 使用 C++ 进行编码,并使用 Qt Creator 作为我的 IDE。 我有一个名为 Interactive 的 QFrame 子类,它是另一个名为 Win
我是一名优秀的程序员,十分优秀!