问题描述

一位 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

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐