c++ - 将 QMainWindow 设置在屏幕中央

标签 c++ qt

我的 QMainWindow 包含一个 QGraphicsView,它应该有最小宽度和高度。因此,我在 QMainWindow 构造函数中使用了以下代码:

ui.graphicsView->setMinimumHeight(VIEWWIDTH);
ui.graphicsView->setMinimumWidth(VIEWWIDTH);

然后我使用下面的代码将QMainWindow设置在屏幕中央:

QRect available_geom = QDesktopWidget().availableGeometry();
QRect current_geom = frameGeometry();
setGeometry(available_geom.width() / 2 - current_geom.width() / 2,
            available_geom.height() / 2 - current_geom.height() / 2,
            current_geom.width(),
            current_geom.height());

但它并没有设置在屏幕中央。如果我从 QGraphicsView 中省略了 setMinimumHeight()setMinimumWidth(),那么主窗口将设置在屏幕的中央。如何克服这个问题?我正在使用 Qt 4.5.2。

谢谢。

最佳答案

您遇到的问题是 Qt 会尽可能地延迟许多计算。当您设置图形 View 的最小宽度和高度时,它会在图形 View 所在的窗口需要重新布局的地方设置一个标志。然而,它不会这样做,直到它必须......在它实际显示在屏幕上之前的几毫秒。因此,当您在主窗口上调用 rect() 时,您得到的是旧矩形,而不是新矩形。

我最好的建议是在主窗口中扩展大小更改事件,并在该事件中调整定位。您可能还必须在窗口实际显示时进行标记,这样如果用户在窗口显示后调整它的大小,您就不会重新定位窗口。

或者,您可以尝试通过扩展 show event 函数并在此处进行操作来重新定位窗口。它可能会在用户实际看到窗口之前发生,但有时可能会闪烁。

关于c++ - 将 QMainWindow 设置在屏幕中央,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1382537/

相关文章:

c++ - Qt创建二进制外部资源文件

c++ - 在 Windows 7 的 Qt Creator 项目中链接 MLPACK、Armadillo 和 LAPACK/BLAS

qt - 在设计模式下创建的 View 上的 QGraphicsView fitInView 不起作用

c++ - 是否有一个跨平台的 C/C++ 库可以为我们提供 CPU 和内存使用情况统计信息?

c++ - 模板类型定义 - 你的工作是什么?

C++ SPDLOG编译错误: variable or field ‘set_error_handler’ declared void

user-interface - 用于只读、可滚动、可折叠、图标列表的 Qt 小部件

c++ - OpenCVs LineIterator 在 MATLAB 中的等价物

c++ - 问题重构奇怪地重复出现的模板模式

qt - 如何将数据作为 QByteArray/QDataStream 从服务器发送到客户端