gpt4 book ai didi

qt - 在Qt中获取物理屏幕尺寸

转载 作者:行者123 更新时间:2023-12-03 15:00:56 25 4
gpt4 key购买 nike

我正在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()

我也尝试过 mydesk.logicalDpiX(),结果也差不多。

最佳答案

这是我的示例(快速又肮脏)。它似乎对我有用,我希望它对您有用。我假设您可以自己维护main.cpp。我是在MacBook Air 11.6“上完成此操作的,然后用一角硬币的图片替换了OS X随附的USA图标:

#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

关于qt - 在Qt中获取物理屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8594969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com