如何在Qt中获取屏幕大小呢?
首先要调用QApplication类中的一个static方法,如下:
QDesktopWidget *QApplication::desktop()
QApplication类用来管理GUI应用程序的控制流和主要设置,其派生关系如下:
QApplication:QGuiApplication:QCoreApplication:QObject
在主程序中,一定是QApplication而非QGuiApplication或QCoreApplication,否则会有
错误“QWidget:
Cannot create a QWidget without QApplication”。
int main(int argc, char *argv[]) { QApplication app(argc, argv); // ... return app.exec(); }
QDesktopWidget类提供了访问多屏幕信息的接口,有时候我们的系统由多个屏幕组成,这时我们可以把这些屏幕当作多个桌面来对待,也可以看成是一个大的虚拟桌面。
>>QDesktopWidget::screenGeometry()用来获得屏幕大小,有三个重载函数:
const QRect QDesktopWidget::screenGeometry(int screen = -1) const
const QRect QDesktopWidget::screenGeometry(const QWidget *widget) const
const QRect QDesktopWidget::screenGeometry(const QPoint &p) const
>>QDesktopWidget::availableGeometry()用来获得屏幕的有效区域,如在screenGeometry()的基础上去掉桌面菜单栏等占据的区域,有三个重载函数:
const QRect QDesktopWidget::availableGeometry(int screen = -1) const
const QRect QDesktopWidget::availableGeometry(const QWidget *widget) const
const QRect QDesktopWidget::availableGeometry(const QPoint &p) const
>>QDesktopWidget继承自QWidget,所以通过QWidget中的width()和height()也可以获得屏幕尺寸,但是有多个屏幕时,这两个接口就用非所用了,因为返回的是整个大的虚拟桌面的大小。
下面是一个完整的例子,展示了获取屏幕尺寸的方法,并将其设置为QML上下问属性,这样在QML文件中也就可以访问了。
#include <QApplication> #include <QQuickView> #include <QtQml> #include <QDesktopWidget> #include <QRect> #include <iostream> int main(int argc, char *argv[]) { QApplication app(argc, argv); int virtualWidth = 0; int virtualHeight = 0; int availableWidth = 0; int availableHeight = 0; int screenWidth = 0; int screenHeight = 0; QDesktopWidget *deskWgt = QApplication::desktop(); if (deskWgt) { virtualWidth = deskWgt->width(); virtualHeight = deskWgt->height(); std::cout << "virtual width:" << virtualWidth << ",height:" << virtualHeight << std::endl; QRect availableRect = deskWgt->availableGeometry(); availableWidth = availableRect.width(); availableHeight = availableRect.height(); std::cout << "available width:" <<availableWidth << ",height:" << availableHeight << std::endl; QRect screenRect = deskWgt->screenGeometry(); screenWidth = screenRect.width(); screenHeight = screenRect.height(); std::cout << "screen width:" <<screenWidth << ",height:" << screenHeight << std::endl; } QQuickView view; view.setSource(QUrl(QStringLiteral("qrc:///main.qml"))); if (view.rootContext()) { view.rootContext()->setContextProperty("virtualWidth", virtualWidth); view.rootContext()->setContextProperty("virtualHeight", virtualHeight); view.rootContext()->setContextProperty("availableWidth", availableWidth); view.rootContext()->setContextProperty("availableHeight", availableHeight); view.rootContext()->setContextProperty("screenWidth", screenWidth); view.rootContext()->setContextProperty("screenHeight", screenHeight); } view.show(); return app.exec(); }