在Qt中获取屏幕大小

如何在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();
}
时间: 2024-11-11 01:00:45

在Qt中获取屏幕大小的相关文章

wift - 使用UIScreen类获取屏幕大小尺寸

UISreen类代表了屏幕,开发中一般用来获取屏幕相关的属性,例如获取屏幕的大小. 1 2 3 4 5 6 7 //获取屏幕大小 var screenBounds:CGRect = UIScreen.mainScreen().bounds println(screenBounds) //iPhone6输出:(0.0,0.0,375.0,667.0) //获取屏幕大小(不包括状态栏高度) var viewBounds:CGRect = UIScreen.mainScreen().applicati

Android获取屏幕大小和设置无标题栏

android获取屏幕大小非常常用,例如写个程序,如果要做成通用性很强的程序,适用屏幕很强,一般布局的时候都是根据屏幕的长宽来定义的,所以我把这个总结一下,方便日后忘记的时候查阅.还有就是有时候写程序根据需求不需要title,可以在程序中设置无title的屏幕!转载请标明出处: http://blog.csdn.net/wdaming1986/article/details/6769821 程序的效果图: 代码说明一切真理: 一.mainActivity.java类得代码: Java代码 pac

VC++获取屏幕大小第二篇 物理大小GetDeviceCaps 上

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 上一篇<VC++获取屏幕大小第一篇像素大小GetSystemMetrics>中介绍了使用GetSystemMetrics函数来获取屏幕的像素大小,本篇将介绍使用GetDeviceCaps函数来获取屏幕的物理大小.下面来看看GetDeviceCaps函数的用法: 函数功能:用于得到被定义的系统数据或者系统配置信息 函数原型:获取一些

cocos2d-x JS 获取屏幕大小或中点

以一张背景图为例: var HelloWorldLayer = cc.Layer.extend({ ctor:function () { this._super(); var bg = new cc.Sprite(res.HelloWorld_png); var size = cc.director.getWinSize();//获取屏幕大小 bg.x = size.width / 2; // x轴/2即为x轴中点 bg.y = size.height / 2; // y轴/2即为y轴中点 th

QT中获取选中的radioButton的两种方法(动态取得控件的objectName之后,对名字进行比较)

QT中获取选中的radioButton的两种方法 QT中要获取radioButton组中被选中的那个按钮,可以采用两种如下两种办法进行: 方法一:采用对象名称进行获取 代码: 1 QRadioButton* pbtn = qobject_cast<QRadioButton*>(ui->BG->checkedButton()); 2 QString name = pbtn->objectName(); 3 if(!QString::compare(name, "rad

java 获取屏幕大小

使用Java AWT类可以很方便取得屏幕分辨率及可用屏幕大小. 01.Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();   此语句可取得屏幕实际大小.如屏幕分辨率是1024*768时,scrSize.width的值为1024,scrSize.height的值为768. 01.Insets scrInsets=Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvir

Android中获取屏幕长宽的方法

package com.kale.screen; import android.annotation.SuppressLint; import android.app.Activity; import android.graphics.Point; import android.os.Bundle; import android.util.Log; import android.view.Display; public class MainActivity extends Activity {

在qt下获取屏幕分辨率

1,在Windows下可以使用 GetSystemMetrics(SM_CXSCREEN);GetSystemMetrics(SM_CYSCREEN) 获取.   2,在Linux下可以使用XDisplayWidth :XDisplayHeight ()获取.3,在QT中呢?很多人说是 QApplication::desktop()->width();QApplication::desktop()->height(); 这个方法对于单显示器模式当然没有问题.但是对于多显示器,特别是使用了扩展桌

Android在onCreate中获取元件大小

大部分的安卓开发者都会遇到在onCreate方法中来获取元件的宽高来进行一些处理,但是遗憾的是得到的所有结果都是0,这是由于安卓的渲染模式决定的,在元件创建但未显示时无法获取元件的固定宽高,在这里分享一下在onCreate方法中获取元件宽高的几种方法: 方法一: /** * 测量方法 获取组件的尺寸大小 * */ int width = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); int height = V