1

我一直在四处搜索并阅读有关移动小部件的文档,但我仍在寻找一个很好的例子。

我有一个用热键显示的小部件,我希望它在 MainWindow 的其他位置而不是中心弹出。如果我使用 move(),那么无论它的父窗口是否改变位置,小部件都会保持在该位置。我希望将小部件放置在父小部件内部的某个位置,以便在移动父小部件时,它保持在相对位置。我该怎么做呢?

我阅读了有关 MapToParent 的信息,但我不确定如何使用它。我试过了:

QPoint fD_p = fDialog->pos();
QPoint parent_fD_p = QWidget::mapToParent(fD_p);
fDialog->move(parent_fD_p);
4

1 回答 1

2

您应该在您的父小部件中重新实现移动事件处理程序, void QWidget::moveEvent ( QMoveEvent * event )并且可能重新实现调整大小事件处理程序。

在这些事件处理程序中,您可以重新计算小部件的新位置,然后移动它。

mapToParentmapFromParent方法转换相对坐标。从文档中:

QPoint QWidget::mapFromParent ( const QPoint & pos ) const
Translates the parent widget coordinate pos to widget coordinates.

Same as mapFromGlobal() if the widget has no parent.
于 2013-03-06T07:59:14.977 回答