我自己创建了一个小部件,包括QVBoxLayout中的QProgressBar和QLabel。它还具有返回标签文本(自创)的功能。 现在在我的MainWindow中,我有两个其他的QHBoxLayouts,我想将我的小部件从一个拖放到另一个。当我点击QLabel和QProgressBar之间的小空闲空间时,它也可以工作。但是,当我直接点击其中一个时,应用程序就会崩溃并烧伤。
我也知道它失败的地方。我mousePressEvent
看起来是这样的:Qt使用自己的小部件拖放?
void DragDrop::mousePressEvent(QMouseEvent *event) {
// !!!!---- make sure ONLY MyWidgets are here, else: CRASH ----!!!!
MyWidget *child = static_cast<MyWidget*>(childAt(event->pos()));
if (!child)
return;
qDebug() << child->returnLabelText();
...
}
所以,当我点击进度条,它会投的进度,而不是我自己的小工具。并且因为QProgressBar没有像returnLabelText()
(但是我的小部件)的功能,所以它失败。
什么是更好的方法来获取我的小部件?
qobject_cast会比dynamic_cast的更好,仅供参考.. – ianmac45 2010-09-20 13:47:45
ianmac45是正确的......在QObject对象的情况下,qobject_cast强烈者优先,因为它不依赖于RTTI。 – Fred 2010-09-20 16:56:23