【发布时间】:2011-04-14 12:57:33
【问题描述】:
我自己创建了一个小部件,包括 QProgressBar 和 QVBoxLayout 中的 QLabel。它还有一个返回标签文本的功能(自创)。
现在在我的 MainWindow 中,我有另外两个 QHBoxLayouts,我想将我的小部件从一个拖放到另一个。当我单击 QLabel 和 QProgressBar 之间的小空闲空间时,它也可以工作。但是当我直接点击其中一个时,应用程序崩溃并痛苦地烧毁。
我也知道它失败的地方。我的mousePressEvent 看起来像这样:
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();
...
}
所以当我点击 ProgressBar 时,它会投射 ProgressBar,而不是我自己的小部件。而且因为 QProgressBar 没有像 returnLabelText() 这样的功能(但我的小部件有)它失败了。
获取我的小部件的更好方法是什么?
【问题讨论】:
标签: c++ qt qt4 drag-and-drop casting