首页 文章

如何拖放qwidget由几个小部件组成?

提问于
浏览
0

我有几个QWidgets,比如说previewWidget,它们每个都包含2个QLabel(可能更多,而不是QLabel) . 我想在主窗口中拖放previewWidgets .

enter image description here

Problem: 我可以通过在绿色区域(即PreviewWidget区域)上按鼠标来移动小部件 . 但是,如果我尝试通过单击其中一个标签来拖动窗口小部件,那么该标签将移出previewWidget(有时我甚至不了解会发生什么) . 我想要的是移动整个previewWidget,或者当它的子节点上按下鼠标时至少没有任何事情发生 .

My approach. 我重载了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?任何例子都表示赞赏 .

1 回答

  • 1

    我建议在光标坐标处识别孩子的策略 .

    在你的 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 ...
        }
    }
    

相关问题