定义:
QPaintDevice 类是可以使用 QPainter 绘制的对象的基类。
QPaintDevice是可以使用 QPainter 绘制的二维空间的抽象。它的默认坐标系的原点位于左上角。 X向右增加,Y向下增加。单位是一个像素。
QPaintDevice 类提供了几个返回各种设备指标的函数: depth() 函数返回其位深度(位平面数)。 height() 函数以默认坐标系统单位(例如 QPixmap 和 QWidget 的像素)返回其高度,而 heightMM() 以毫米为单位返回设备的高度。同样,width() 和 widthMM() 函数分别以默认坐标系统单位和毫米返回设备的宽度。
代码解析:
class Q_GUI_EXPORT QPaintDevice // device for QPainter
{
public:
enum PaintDeviceMetric {
PdmWidth = 1,
PdmHeight,
PdmWidthMM,
PdmHeightMM,
PdmNumColors,
PdmDepth,
PdmDpiX,
PdmDpiY,
PdmPhysicalDpiX,
PdmPhysicalDpiY,
PdmDevicePixelRatio,
PdmDevicePixelRatioScaled
};
virtual ~QPaintDevice();
virtual int devType() const;
bool paintingActive() const;
virtual QPaintEngine *paintEngine() const = 0;
int width() const { return metric(PdmWidth); }
int height() const { return metric(PdmHeight); }
int widthMM() const { return metric(PdmWidthMM); }
int heightMM() const { return metric(PdmHeightMM); }
int logicalDpiX() const { return metric(PdmDpiX); }
int logicalDpiY() const { return metric(PdmDpiY); }
int physicalDpiX() const { return metric(PdmPhysicalDpiX); }
int physicalDpiY() const { return metric(PdmPhysicalDpiY); }
int devicePixelRatio() const { return metric(PdmDevicePixelRatio); }
qreal devicePixelRatioF() const { return metric(PdmDevicePixelRatioScaled) / devicePixelRatioFScale(); }
int colorCount() const { return metric(PdmNumColors); }
int depth() const { return metric(PdmDepth); }
static inline qreal devicePixelRatioFScale() { return 0x10000; }
protected:
QPaintDevice() noexcept;
virtual int metric(PaintDeviceMetric metric) const;
virtual void initPainter(QPainter *painter) const;
virtual QPaintDevice *redirected(QPoint *offset) const;
virtual QPainter *sharedPainter() const;
ushort painters; // refcount
private:
Q_DISABLE_COPY(QPaintDevice)
QPaintDevicePrivate *reserved;
friend class QPainter;
friend class QPainterPrivate;
friend class QFontEngineMac;
friend class QX11PaintEngine;
friend Q_GUI_EXPORT int qt_paint_device_metric(const QPaintDevice *device, PaintDeviceMetric metric);
};
可以看到好几个函数都用到了metric()函数。
int QPaintDevice::metric(PaintDeviceMetric m) const
{
// Fallback: A subclass has not implemented PdmDevicePixelRatioScaled but might
// have implemented PdmDevicePixelRatio.
if (m == PdmDevicePixelRatioScaled)
return this->metric(PdmDevicePixelRatio) * devicePixelRatioFScale();
qWarning("QPaintDevice::metrics: Device has no metric information");
if (m == PdmDpiX) { //QPaintDevice::PdmDpiX=7 设备的水平分辨率 (以 DPI 每英寸点数为单位)。
return 72;
} else if (m == PdmDpiY) {
return 72;
} else if (m == PdmNumColors) {
// FIXME: does this need to be a real value?
return 256;
} else if (m == PdmDevicePixelRatio) {
return 1;
} else {
qDebug("Unrecognised metric %d!",m);
return 0;
}
}
metric返回值与设备相关。