我正在寻找一种方法来连接 QPixmap 和正在写入的数据,以便最终我可以准确记录屏幕上当前的内容。
void QPainter::drawRects(const QRectF *rects, int rectCount)
这是来自 qpainter.cpp 的示例函数(在 Qt SDK 中的 ./src/gui/painting 中找到)我想要得到的是矩形正在写入的像素图(在 device()-> 的情况下) devType() 是一个像素图)。所以我有这个检查:
if(this->device()->devType() == QInternal::Pixmap) {
const QPixmap *Pixmap = dynamic_cast<const QPixmap *>(this->device());
qDebug() << "rect2pixmap - address: "<<Pixmap<<" - key: "<<Pixmap.cacheKey();
}
我尝试找到 Qpixmap 的内存地址,并根据正在写入屏幕的 QPixmap 的内存地址检查它。
void QPainter::drawPixmap(const QPointF &p, const QPixmap &pm)
{
const QWidget *widget = dynamic_cast<const QWidget *>(this->device());
qDebug() << "pixmap - address: "<<&pm << " - key: "<<pm.cacheKey();
[...]
但是地址都不同。我也尝试过使用缓存键,但我遇到了同样的问题。
这是一个示例控制台输出:
rect2pixmap - address: 0x7fffac1dc9c0 - key: 72057594037927937
rect2pixmap - address: 0x7fffac1d9f80 - key: 72057598332895233
rect2pixmap - address: 0x7fffac1dcd60 - key: 72057602627862529
rect2pixmap - address: 0x7fffac1dcd60 - key: 72057606922829825
rect2pixmap - address: 0x7fffac1dd100 - key: 72057611217797121
rect2pixmap - address: 0x7fffac1df2e0 - key: 72057615512764417
pixmap - address: 0x7fffac1dffa0 - key: 197568495616
pixmap - address: 0x7fffac1e0170 - key: 214748364800
pixmap - address: 0x7fffac1e0340 - key: 231928233984
pixmap - address: 0x7fffac1e0510 - key: 249108103168
pixmap - address: 0x7fffac1e06e0 - key: 261993005056
rect2pixmap - address: 0x7fffac1dadb0 - key: 72057619807731713
那么我要问的是,在写入矩形的像素图和稍后打印到屏幕上的像素图之间是否存在链接?如果没有调用 Pixmap,我可以安全地假设屏幕上没有显示矩形吗?
如果有什么不清楚的问题,请告诉我,我会尽力澄清。
谢谢你。