如何知道QDockWidget是通过按钮还是通过拖动来取消停靠?

时间:2012-06-25 04:23:38

标签: c++ qt qt4

我是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中,如果单击该按钮,它将转到指定的位置,但如果您拖动它,它将保持在您放置它的位置。

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

1 个答案:

答案 0 :(得分:5)

QDockWidget有一个名为'qt_dockwidget_floatbutton'的未记录按钮。 您可以像这样访问它:

QAbstractButton* button = 
        YourDockWidget->findChild<QAbstractButton*>("qt_dockwidget_floatbutton");

connect(button, SIGNAL(clicked()), this, SLOT(yourSlot()));

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