问题描述

一位 Qt 新手提问,是否有办法将 QMainWindow 的大小设置为用户桌面大小的 70%。他尝试过使用伸缩因子,但未成功。QWidget::setFixedSize 可以工作,但只能使用像素值。

解决方案

方案一:使用 QDesktopWidget

在 QMainWindow 的构造函数中,可以这样设置窗口大小:

resize(QDesktopWidget().availableGeometry(this).size() * 0.7);

此代码会将窗口大小调整为可用屏幕空间的 70%。

方案二:使用 QDesktopWidget 获取屏幕尺寸

感谢 Amir eas 的提示,可以通过以下代码来实现:

#include <QDesktopWidget>
#include <QMainWindow>

QDesktopWidget dw;
MainWindow w;

int x = dw.width() * 0.7;
int y = dw.height() * 0.7;
w.setFixedSize(x, y);

这个方法可能在多显示器设置下效果不好。

方案三:使用 availableGeometry 方法

使用 QDesktopWidget 的 availableGeometry(QWidget*) 方法,可以获取当前窗口所在屏幕的几何尺寸,例如:

QRect screenSize = desktop.availableGeometry(this);
this->setFixedSize(QSize(screenSize.width() * 0.7, screenSize.height() * 0.7));

其中,this 是指向 MainWindow 的指针。这个方法在使用多个屏幕时也能正常工作。

方案四:适用于 Qt6 的新方法

在 Qt6 中,QDesktopWidget 已经被弃用,可以使用以下代码:

resize(QGuiApplication::primaryScreen()->availableGeometry().size() * 0.7);

这个方法同样将窗口大小调整为主屏幕可用空间的 70%。

总结

以上几种方法都可以实现将 QMainWindow 的大小设置为用户桌面大小的 70%,可以根据具体的 Qt 版本和需求选择合适的方案。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐