移动 QMainWindow 不会影响子窗口小部件的绘制位置

Posted

技术标签:

【中文标题】移动 QMainWindow 不会影响子窗口小部件的绘制位置【英文标题】:Moving QMainWindow does not affect where the child widgets are being drawn 【发布时间】:2016-01-12 23:10:35 【问题描述】:

我对 Qt 环境还很陌生。我有一个要在第二台显示器上显示的应用程序。目前,在 MainWindow 构造函数中,我正在使用以下代码将窗口移动到第二个监视器。

main():

MainWindow w;
w.showFullScreen();

MainWindow() 构造函数:

QRect screenres = QApplication::desktop()->screenGeometry(1);
this->move(QPoint(screenres.x(), screenres.y()));
this->resize(screenres.width(), screenres.height());

这适用于我的主窗口。问题是所有子小部件仍然显示在第一台显示器上。我有一个菜单小部件,它是在 move() 之后在构造函数中创建的 centralWidgetFrame 的一部分,但它没有在第二个监视器上创建。据我了解,应该在相对于其父级的位置创建子小部件。

MainWindow 按预期返回一个 (1920,0) 的 pos(),子菜单小部件给我一个 (0,0) 的 pos()。

我使用的是 Qt 4.7.1。有什么建议吗?

【问题讨论】:

【参考方案1】:

我认为这是因为您在其构造函数中移动 MainWindow 并调整其大小。

在 main() 中执行:

MainWindow w;
QRect screenres = QApplication::desktop()->screenGeometry(1);
w.move(QPoint(screenres.x(), screenres.y()));
w.resize(screenres.width(), screenres.height());
w.showFullScreen();

【讨论】:

这其实是我最先做的。它做同样的事情。我最终将它移到了构造函数中,因为我认为我可能需要在初始化其他小部件、工具栏等之前完成它。 那么最好切换到 Qt 5。它具有 QWindow::setScreen 功能,并且已知在多显示器配置中工作更一致。此外,Qt 4 已经不支持了。

以上是关于移动 QMainWindow 不会影响子窗口小部件的绘制位置的主要内容,如果未能解决你的问题,请参考以下文章

当设备的(android)键盘处于活动状态时,jquery 移动弹出窗口小部件不会移动

调用父窗口小部件函数

Qt5 QMainWindow 组件删除

Qt:为啥在 QMainWindow 中添加状态栏会影响大小调整?

QT 布局管理器在移动窗口之前隐藏小部件时不会恢复空间

将 QMainWindow 与 Qdialog 小部件连接起来