Физический размер экрана в Qt
i'км работает в Qt, мне нужна помощь, чтобы получить физический размер экрана (монитора),
в Qt можно получить QDesktopWidget
С QApplication
, Я:
QDesktopWidget *mydesk = QApplication::desktop();
на QDesktopwidget
есть некоторые методы, чтобы получить разрешение в пикселях, а некоторые, чтобы получить размер в milimethers:
mydesk-> widthMM(); mydesk->heightMM();
однако это не соответствует физическому размеру, когда я измеряю свой экран линейкой, есть значительная разница.
также можно сделать измерение DPI и рассчитать размер экрана:
mydesk->physicalDpiX(); mydesk->physicalDpiY();
double Winches = (double)mydesk.width() / (double)mydesk.physicalDpiX();
double Hinches = (double)mydesk.Height() / (double)mydesk.physicalDpiY();
здесь mydesk.width()
и mydesk.height()
дать размер в пикселях(разрешение)
однако измерение также неправильно и очень близко к mydesk.widthMM()
и mydesk.heightMM()
также у меня есть triyed mydesk.logicalDpiX()
и имеет аналогичные результаты.
1 ответов
вот мой (быстрый и грязный) пример. Кажется, это работает для меня, и я надеюсь, что это сработает для вас. Полагаю, ты можешь позаботиться о мэйн.cpp самостоятельно. Я сделал это на MacBook Air 11.6" и заменил изображение десятицентовика для значка США, включенного в 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