qt size screen monitor dpi

Obtener el tamaño de la pantalla física en Qt



size screen (1)

Aquí está mi ejemplo (rápido y sucio). Parece funcionar para mí y espero que funcione para ti. Supongo que puedes encargarte de main.cpp por tu cuenta. Hice esto en una MacBook Air 11.6 "y sustituí una imagen de una moneda de diez centavos por el ícono de EE. UU. Incluido con OS X:

#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); }; 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

Estoy trabajando en Qt, necesito ayuda para obtener el tamaño físico de la pantalla (monitor),

En Qt se puede obtener un QDesktopWidget de QApplication , quiero decir:

QDesktopWidget *mydesk = QApplication::desktop();

El QDesktopwidget tiene algunos métodos para obtener la resolución en píxeles y algunos para obtener el tamaño en milímetros:

mydesk-> widthMM(); mydesk->heightMM();

Sin embargo, esto no corresponde al tamaño físico, cuando mido mi pantalla con una regla, hay una diferencia considerable.

También se puede obtener la medida de DPI y calcular el tamaño de la pantalla:

mydesk->physicalDpiX(); mydesk->physicalDpiY(); double Winches = (double)mydesk.width() / (double)mydesk.physicalDpiX(); double Hinches = (double)mydesk.Height() / (double)mydesk.physicalDpiY();

donde mydesk.width() y mydesk.height() dan el tamaño en píxeles (resolución)

Sin embargo, la medición también es incorrecta y está muy cerca de mydesk.widthMM() y mydesk.heightMM()

También he probado mydesk.logicalDpiX() y tiene resultados similares.