我一直在四处寻找关于移动小部件的文档,但我仍然在寻找一个很好的例子。
我有一个用热键显示的小部件,我希望它在MainWindow而不是中心的其他地方弹出。如果我使用move(),那么无论父窗口是否改变位置,窗口小部件都会保持在该位置。我希望将窗口小部件放置在父窗口小部件内的位置,以便在移动父窗口小部件时,它保持在相对位置。我怎么能这样做呢?
我读到了MapToParent,但我不知道如何使用它。我试过了:
QPoint fD_p = fDialog->pos();
QPoint parent_fD_p = QWidget::mapToParent(fD_p);
fDialog->move(parent_fD_p);
答案 0 :(得分:2)
您应该在父窗口小部件void QWidget::moveEvent ( QMoveEvent * event )
中重新实现move事件处理程序,并且可能重新调整resize事件处理程序。
在这些事件处理程序中,您可以重新计算窗口小部件的新位置,然后移动它。
mapToParent
和mapFromParent
方法转换相对坐标。来自文档:
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.