我有几个 QWidget,比方说 previewWidget,每个 QWidget 都包含 2 个 QLabel(可能比 QLabel 更多)。我想在主窗口中拖放 previewWidget。
问题: 我可以通过在绿色区域(即 PreviewWidget 区域)上按下鼠标来移动小部件。但是,如果我尝试通过单击其中一个标签来拖动小部件,该标签就会移出 previewWidget(有时我什至不明白会发生什么)。我想要的是移动整个 previewWidget 或至少在鼠标按下其子项时不发生任何事情。
我的方法。我重载了 mousePressEvent(),如下所示:
void MainWindow::mousePressEvent(QMouseEvent *event)
{
// I beleive my problem is right here...
PreviewWidget *child = static_cast<PreviewWidget*>(this->childAt(event->pos()));
if (!child)
return; // this is not returned even if the child is not of a PreviewWidget type
// Create QDrag object ...
}
如何按我想要的方式拖放 PreviewWidget?任何示例表示赞赏。
最佳答案
我提出了一种在光标坐标处识别 child 的策略。
在你的mousePressEvent
中:
//...
QWidget * child = childAt(e->pos());
if(child != 0)
{
QString classname(child->metaObject()->className());
if( classname == "QLabel")
{
child = child->parentWidget();
if(child != 0)
{
classname = child->metaObject()->className();
}
}
if(classname == "PreviewWidget")
{
//do whatever with child ...
}
}
关于c++ - 如何拖放由多个widget组成的qwidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295731/