Qt Android。获取设备屏幕分辨率

时间:2014-07-11 19:03:18

标签: android qt screen resolution pixel

我正在开发Android设备上的qt 5.3。我无法获得屏幕分辨率。 使用旧的qt 5版本,此代码有效:

QScreen *screen = QApplication::screens().at(0);
largh=screen->availableGeometry().width();
alt  =screen->availableGeometry().height();

但是现在它不起作用(返回屏幕大小00x00)。还有另一种方法吗?感谢

3 个答案:

答案 0 :(得分:4)

Size保持像素分辨率

screen->size().width()
screen->size().height();

然而,availableSize保留不包括窗口管理器保留区域的大小...

screen->availableSize().width()
screen->availableSize().height();

有关QScreen课程的更多信息。

答案 1 :(得分:1)

我发现有几种方法可以获得设备分辨率,每种方法都输出相同的结果,并且谢天谢地在Qt支持的所有Os-es中都有效...

1)我最喜欢的是在引用类中使用QDesktopWidget编写静态函数,并在整个代码中使用它:

QRect const CGenericWidget::getScreenSize()
{
    //Note: one might implement caching of the value to optimize processing speed. This however will result in erros if screen resolution is resized during execution
    QDesktopWidget scr;

    return scr.availableGeometry(scr.primaryScreen());
}

然后你可以在代码中调用这样的函数:

qDebug() << CGenericWidget::getScreenSize();

它将返回一个QRect const对象,您可以使用它来获取没有顶部和底部条形图的屏幕尺寸。

2)另一种获取屏幕分辨率的方法是:如果你的应用是全屏的,那就是:

QWidget *activeWindow = QApplication::activeWindow();
m_sw = activeWindow->width();
m_sh = activeWindow->height();

3)当然,您可以选择Zeus推荐:

QScreen *screen = QApplication::screens().at(0);
largh=screen->availableSize().width();
alt  =screen->availableSize().height();

答案 2 :(得分:1)

有关详细信息,屏幕availableSize在一开始就没有准备好,所以你必须等待它,这是代码:

Widget::Widget(QWidget *parent){
...   
QScreen *screen = QApplication::screens().at(0);
connect(screen, SIGNAL(virtualGeometryChanged(QRect)), this,SLOT(getScreen(QRect)));
}

void Widget::getScreen(QRect rect)
{
    int screenY = screen->availableSize().height();
    int screenX = screen->availableSize().width();
    this->setGeometry(0,0,screenX,screenY);
}