如何在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
#include
#include
#include
#include
#include
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:" <screenGeometry();
screenWidth = screenRect.width();
screenHeight = screenRect.height();
std::cout << "screen width:" <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();
}