私はQtで働いていますが、画面(モニター)の物理的なサイズを取得するために助けが必要です、
Qtでは、QDesktopWidget
からQApplication
を取得できます。つまり、次のようになります。
_QDesktopWidget *mydesk = QApplication::desktop();
_
QDesktopwidget
には、解像度をピクセル単位で取得する方法と、サイズをミリエーテル単位で取得する方法があります。
_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()
に非常に近いです。
また、mydesk.logicalDpiX()
を試してみましたが、同様の結果が得られました。
これが私の(速くて汚い)例です。それは私にとってはうまくいくようで、あなたにとってもうまくいくことを願っています。 main.cppは自分で処理できると思います。私はこれをMacBookAir 11.6 "で行い、OSXに含まれているUSAアイコンの代わりに10セント硬貨の写真を使用しました。
#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
次の方法で、画面の正確な物理サイズをmm単位で取得できました。
QSizeF screenSize = QGuiApplication::primaryScreen()->physicalSize();
ただし、Qtのドキュメントで次の文を見つけました。
基盤となるシステムが提供する情報によっては、値が完全に正確でない場合があります。
そのため、システムでは機能しない可能性があります。