본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2017. 2. 18.
반응형

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 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)

반응형