在 Qt 中设置 QMainWindow 的大小

问题描述

一位 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 版本和需求选择合适的方案。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Qt设置子窗口非常简单,只需要调用 QWidget::setParent() 函数即可。你可以使用QWidget::setWindowFlags() 函数来设置子窗口的属性,例如设置它是否可见、是否可以被移动或者调整大小等。 ### 回答2: 在Qt,可以使用QMainWindow作为主窗口,然后在主窗口添加子窗口。 首先,在主窗口类定义子窗口的指针,并在构造函数进行初始化。例如: ``` class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); private: QDialog *childWindow; }; ``` 然后,在构造函数创建子窗口并设置相关属性,例如窗口标题、大小以及窗口模式: ``` MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { // 创建子窗口对象 childWindow = new QDialog(this); // 设置子窗口的标题 childWindow->setWindowTitle("子窗口"); // 设置子窗口的大小(可选) childWindow->resize(400, 300); // 设置子窗口的窗口模式(可选) childWindow->setWindowFlags(Qt::Dialog); } ``` 接下来,可以在主窗口添加一个按钮,并在按钮的槽函数显示子窗口: ``` QPushButton *button = new QPushButton("打开子窗口", this); connect(button, &QPushButton::clicked, this, [this]() { childWindow->show(); }); ``` 当点击该按钮时,子窗口将会显示在主窗口。 需要注意的是,在Qt,子窗口的具体实现可以是QDialog、QWidget或其他继承自QWidget的类,根据实际需求进行选择。同时,还可以根据具体需求设置子窗口的属性和样式,例如窗口模式、背景颜色等。 总结起来,通过在主窗口类创建子窗口的指针,并在构造函数设置子窗口的相关属性,最后在需要显示子窗口的地方调用show()函数即可在Qt设置子窗口。 ### 回答3: 在Qt设置子窗口可以通过以下步骤实现: 1. 创建一个新的QWidget对象作为子窗口,可以使用QWidget类或其派生类(如QDialog)来创建。例如: ``` QDialog *childWindow = new QDialog(this); ``` 2. 设置子窗口的属性和样式,例如设置窗口标题、大小和位置等。可以使用setWindowTitle()、setFixedSize()和move()等子窗口对象的方法来设置。例如: ``` childWindow->setWindowTitle("子窗口"); childWindow->setFixedSize(400, 300); childWindow->move(100, 100); ``` 3. 将子窗口显示出来。可以使用show()方法来显示子窗口,或者使用exec()方法以模态方式显示子窗口。例如: ``` childWindow->show(); // 以非模态方式显示子窗口 // 或者 childWindow->exec(); // 以模态方式显示子窗口 ``` 以上是创建并显示子窗口的基本步骤。但实际上,还有其他一些设置子窗口的方法和属性,如设置子窗口的布局、添加子窗口的控件、连接子窗口的信号和槽等,这些都可以根据具体的需求进行进一步设置和操作。例如,可以使用QVBoxLayout或QGridLayout设置子窗口的布局,使用addWidget()将控件添加到布局,使用connect()连接控件的信号和槽等。 总之,在Qt设置子窗口需要创建一个QWidget对象或其派生类的实例,设置其属性和样式,然后显示出来。根据具体需求,还可以进一步设置子窗口的布局和控件等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

应用市场

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值