我有几个QWidget,比如说PreviewWidget,每个QWidget都由2个QLabel组成(可能比QLabel还要多)。我想在主窗口中拖放PreviewWidgets。

c++ - 如何拖放由多个小部件组成的qwidget?-LMLPHP

问题:我可以通过在绿色区域(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?任何示例都被赞赏。

最佳答案

我建议一种在光标坐标处识别孩子的策略。

在您的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++ - 如何拖放由多个小部件组成的qwidget?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48295731/

10-12 05:57