2

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

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

4

1 回答 1

5

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

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

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

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

于 2012-06-25T07:44:31.050 回答