QPixmap とそれに書き込まれているデータを接続する方法を探しています。これにより、最終的に現在画面に表示されているものを正確に記録できます。
void QPainter::drawRects(const QRectF *rects, int rectCount)
これは qpainter.cpp のサンプル関数です (Qt SDK の ./src/gui/painting にあります) 私が取得しようとしているのは、長方形が書き込まれている Pixmap です (device()-> devType() は Pixmap です)。だから私はこのチェックを持っています:
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 が呼び出されていない場合、四角形が画面に表示されていないと安全に想定できますか?
質問に関して不明な点がある場合は、お知らせください。できる限り明確にするよう努めます。
ありがとうございました。