티스토리 뷰

목차

    반응형

    Qt 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)



    Qt 모니터 이용 - 헤더 파일

    header.txt



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #ifndef WINDOW_H
    #define WINDOW_H
     
    #include <QtGui>
     
    class Window : public QWidget
    {
        Q_OBJECT
     
    public:
        QWidget *canvas;
        QSlider *slider;
        QPixmap pixmap;
     
    private:
        qreal zoom;
        qreal pixels;
        qreal px_width;
        qreal px_height;
        qreal mm_width;
        qreal mm_height;
     
    public:
        Window();
        void paintEvent(QPaintEvent *);
     
    public slots:
        void setZoom(int);
    };
    cs


    헤더 파일에도 보이듯, QtGui를 인클루드해야 QWidget의 요소들을 가져와 사용할 수 있습니다. 모니터 해상다, 레이아웃 스크린 사이즈는 QtGui 헤더를 이용해야 합니다.




    Qt 공식 홈페이지엔 현재 5.7 버전의 QtGui 클래스 정보를 제공하고 있습니다.




    그렇다고 QWidget의 요소를 모두 쓰는 건 아니고, 꼭 필요한 건 QDeskTopWidget이란 클래스입니다.


    공식 홈페이지에선 아래와 같은 그림을 제공하고 있습니다.



    Qt 모니터 해상도와 크기 얻기[Qt 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)]



    지금과 같은 상황이랑 꼭 맞는 그림은 아닌데, 아무튼 저 클래스를 이용하면 데스크탑이나 응용 프로그램의 창 크기나 위치를 제어할 수 있습니다.


    실제로 QDesktopWidget을 이용하는 예는 아래에 있습니다.




    Qt 모니터 이용 - cpp 파일

    cpp.txt



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Window::Window()
    {
        QHBoxLayout *layout = new QHBoxLayout;
     
        canvas = new QWidget;
        slider = new QSlider;
        slider->setMinimum(0);
        slider->setMaximum(100);
        slider->setValue(50);
     
        layout->addWidget(canvas);
        layout->addWidget(slider);
     
        this->setLayout(layout);
     
        if(!pixmap.load(":/resources/USA.gif"))
        {
            qDebug() << "Fatal error: Unable to load image";
            exit(1);
        }
     
        QObject::connect(slider, SIGNAL(valueChanged(int)), SLOT(setZoom(int)));
    }
     
    void Window::paintEvent(QPaintEvent *event)
    {
        QPainter paint;
        paint.begin(this);
        paint.scale(zoom, zoom);
        paint.drawPixmap(00, pixmap);
        paint.end();
    }
     
    void Window::setZoom(int new_zoom)
    {
        zoom = (qreal)(50 + new_zoom) / 50;
        pixels = pixmap.width() * zoom;
     
        QDesktopWidget desk;
     
        px_width = desk.width() / pixels;
        px_height = desk.height() / pixels;
        mm_width = px_width * 17.9;
        mm_height = px_height * 17.9;
     
        qDebug() << "Zoom: " << zoom;
        qDebug() << "desk.widthMM:" << desk.widthMM();
        qDebug() << "px_width: " << px_width;
        qDebug() << "px_height: " << px_height;
        qDebug() << "mm_width: " << mm_width;
        qDebug() << "mm_height: " << mm_height;
     
        this->repaint();
    }
     
    #include "moc_window.cpp"
     
    #endif // WINDOW_H
    cs


    MFC랑 비교하자면 해상도 구하는 소스가 엄청 짧네요.


    MFC 좀 그만 썼으면 ...


    Qt 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)

    반응형