c++ - 如何拖放由多个widget组成的qwidget?

标签 c++ qt drag-and-drop qt5

我有几个 QWidget,比方说 previewWidget,每个 QWidget 都包含 2 个 QLabel(可能比 QLabel 更多)。我想在主窗口中拖放 previewWidget

enter image description here

问题: 我可以通过在绿色区域(即 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/

相关文章:

c++ - 使用继承函数而不是基础函数(不是抽象的)

c++ - pythonqt 对数百万对象的可扩展性

c++ - 如何使用opencv在视频中放置对象

c++ - 动态内存分配

c++ - 设计生成所有 n 位数字组合的递归函数的最佳方法是什么?

c++ - QTcpSocket 数据传输在读取缓冲区已满时停止,并且在释放时不会恢复

python - PyQt5 QuickControls Material 风格

ios - 在 cocos2d 3.1 中拖放物理体?

java - 在 GXT 中拖动时,拖动源中的值将被删除

jquery - 当我制作一个可拖动克隆并将其放入可放置对象中时,我无法再次拖动它