티스토리 뷰
목차
반응형
Qt 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)
Qt 모니터 이용 - 헤더 파일
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 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)]
지금과 같은 상황이랑 꼭 맞는 그림은 아닌데, 아무튼 저 클래스를 이용하면 데스크탑이나 응용 프로그램의 창 크기나 위치를 제어할 수 있습니다.
실제로 QDesktopWidget을 이용하는 예는 아래에 있습니다.
Qt 모니터 이용 - cpp 파일
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(0, 0, 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 모니터 해상도 및 크기 얻기 (레이아웃 스크린 사이즈)
반응형