• Qt应用程序采用双屏显示的一些想法


         最近由于项目需要,采用Qt开发的程序要能够支持双屏显示,在网上调研了以下,发现网页http://www.ics.com/blog/whats-new-qt-5-qscreen-class#.Ud9mY4csnXB中对于Qt的多屏幕管理有一定论述,指出采用QScreen可以获取窗口的相关信息,代码如下:

    #include <QGuiApplication>
    #include <QScreen>
    #include <QDebug>
    
    /*
      Example of using Qt 5 QScreen class.
    */
    
    // Helper function to return display orientation as a string.
    QString Orientation(Qt::ScreenOrientation orientation)
    {
        switch (orientation) {
            case Qt::PrimaryOrientation           : return "Primary";
            case Qt::LandscapeOrientation         : return "Landscape";
            case Qt::PortraitOrientation          : return "Portrait";
            case Qt::InvertedLandscapeOrientation : return "Inverted landscape";
            case Qt::InvertedPortraitOrientation  : return "Inverted portrait";
            default                               : return "Unknown";
        }
    }
    
    int main(int argc, char *argv)
    {
        QGuiApplication a(argc, &argv);
    
        qDebug() << "Number of screens:" << QGuiApplication::screens().size();
    
        qDebug() << "Primary screen:" << QGuiApplication::primaryScreen()->name();
    
        foreach (QScreen *screen, QGuiApplication::screens()) {
            qDebug() << "Information for screen:" << screen->name();
            qDebug() << "  Available geometry:" << screen->availableGeometry().x() << screen->availableGeometry().y() << screen->availableGeometry().width() << "x" << screen->availableGeometry().height();
            qDebug() << "  Available size:" << screen->availableSize().width() << "x" << screen->availableSize().height();
            qDebug() << "  Available virtual geometry:" << screen->availableVirtualGeometry().x() << screen->availableVirtualGeometry().y() << screen->availableVirtualGeometry().width() << "x" << screen->availableVirtualGeometry().height();
            qDebug() << "  Available virtual size:" << screen->availableVirtualSize().width() << "x" << screen->availableVirtualSize().height();
            qDebug() << "  Depth:" << screen->depth() << "bits";
            qDebug() << "  Geometry:" << screen->geometry().x() << screen->geometry().y() << screen->geometry().width() << "x" << screen->geometry().height();
            qDebug() << "  Logical DPI:" << screen->logicalDotsPerInch();
            qDebug() << "  Logical DPI X:" << screen->logicalDotsPerInchX();
            qDebug() << "  Logical DPI Y:" << screen->logicalDotsPerInchY();
            qDebug() << "  Orientation:" << Orientation(screen->orientation());
            qDebug() << "  Physical DPI:" << screen->physicalDotsPerInch();
            qDebug() << "  Physical DPI X:" << screen->physicalDotsPerInchX();
            qDebug() << "  Physical DPI Y:" << screen->physicalDotsPerInchY();
            qDebug() << "  Physical size:" << screen->physicalSize().width() << "x" << screen->physicalSize().height() << "mm";
            qDebug() << "  Primary orientation:" << Orientation(screen->primaryOrientation());
            qDebug() << "  Refresh rate:" << screen->refreshRate() << "Hz";
            qDebug() << "  Size:" << screen->size().width() << "x" << screen->size().height();
            qDebug() << "  Virtual geometry:" << screen->virtualGeometry().x() << screen->virtualGeometry().y() << screen->virtualGeometry().width() << "x" << screen->virtualGeometry().height();
            qDebug() << "  Virtual size:" << screen->virtualSize().width() << "x" << screen->virtualSize().height();
        }
    }

         于是,有了建立基于Qt的双屏显示程序的思路:建立两个QMainWindow,然后分别通过函数setGeometry分别指定两个QMainWindow为显示器一和显示器二的位置,这样总体的效果就是这个程序能够实现双屏的功能。同时需要注意,在定义QMainWindow的对象时,需要使用堆内存的方法,不能采用栈内存,在网页http://www.qtcentre.org/archive/index.php/t-16439.html中对此有过论述。

  • 相关阅读:
    UVA
    UVA
    母函数
    快速排序
    集合:set
    stringstream转换
    大学期间的任务
    Devc++贪吃蛇
    Vector容器
    广度优先遍历
  • 原文地址:https://www.cnblogs.com/ppffs/p/3186221.html
Copyright © 2020-2023  润新知