【问题标题】:Qt Android. Get device screen resolutionQt安卓。获取设备屏幕分辨率
【发布时间】:2014-07-11 19:03:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: android qt screen resolution pixel


    【解决方案1】:

    Size 保存像素分辨率

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

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

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

    有关QScreen 课程的更多信息。

    【讨论】:

      【解决方案2】:

      更多信息,screen 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);
      }
      

      【讨论】:

        【解决方案3】:

        我发现有几种方法可以获得设备分辨率,每种方法都输出相同的结果,谢天谢地,它适用于 Qt 支持的所有操作系统...

        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) 当然你也有宙斯推荐的选择:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多