【问题标题】:How to know if QDockWidget was undocked via the button or by dragging it?如何知道 QDockWidget 是通过按钮还是通过拖动取消停靠?
【发布时间】:2012-06-25 15:44:31
【问题描述】:

我是 Qt 新手,我不知道如何解决这个问题。 当用户单击取消停靠按钮时,我有一个 QDockWidget 放置在某个位置(我不知道它的名称)。发生这种情况时,小部件的可见性会更改两次,因为它会消失并再次出现但未停靠。为了在它脱离后将其放置在某个位置,我在可见性更改事件中使用它:

if (ui->searchBar->isFloating()) {
    int x = (this->x() + this->width()) - 410;
    int y = (this->y() + this->height()) - 70;
    ui->searchBar->setGeometry(QRect(x,y,400,60));
}

问题在于,在 Linux 中,如果我通过拖动小部件而不是单击取消停靠按钮来取消停靠,当我将其放在窗口的某个位置时,它会自动移动到上面代码指定的位置。这是有道理的,但是这不会在 Windows 中发生(我需要应用程序在两个操作系统中运行)。在 Windows 中,如果您单击按钮,它会转到指定位置,但如果您拖动它,它会停留在您放置它的位置。

要修复它,我计划仅在未拖动小部件时才使用上述代码,但我不确定如何执行此操作。有人可以帮助我或对如何解决这个问题有更好的想法吗?

【问题讨论】:

    标签: c++ qt qt4


    【解决方案1】:

    QDockWidget 有名为“qt_dockwidget_floatbutton”的未记录按钮。 你可以这样访问它:

    QAbstractButton* button = 
            YourDockWidget->findChild<QAbstractButton*>("qt_dockwidget_floatbutton");
    
    connect(button, SIGNAL(clicked()), this, SLOT(yourSlot()));
    

    因此,您可以将代码放在该插槽上方,以便仅在通过按钮取消停靠时移动小部件。

    【讨论】:

    • 非常感谢,如果它没有记录,你是怎么知道的?
    • 我几天前读过here :)
    猜你喜欢
    • 1970-01-01
    • 2020-12-17
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多