我在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()
并且它也有类似的结果。
答案 0 :(得分:8)
这是我的(快速和肮脏)示例。它似乎对我有用,我希望它对你有用。我假设你可以自己照顾main.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
答案 1 :(得分:0)
以下方法对我有用,它可以准确地获得以毫米为单位的屏幕物理尺寸。
QSizeF screenSize = QGuiApplication::primaryScreen()->physicalSize();
但是,在Qt文档中,我发现了以下句子:
取决于底层系统提供什么信息的价值 可能并不完全准确。
因此它可能不适用于您的系统。