QPixmapとその上に書き込まれるデータを接続する方法を探しています。その結果、最終的に画面上のものを正確に記録できます。QPixmapに描画されているデータとの接続
void QPainter::drawRects(const QRectF *rects, int rectCount)
これは私が取得しようとしています何(QtのSDKに./src/gui/paintingで見つかった)qpainter.cpp からの関数の例では、矩形で(に書き込まれていることをピックスマップです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ののメモリアドレスを見つけ、画面に書き込まれているQPixmapsのメモリアドレスに対してそれをチェックしてみました。
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
それでは、私が求めていますがRECTが書き込まれていることをピックスマップと画面に後に印刷されているピックスマップ間をリンクするとにかくがありますか? Pixmapが呼び出されていない場合、rectが画面に表示されていないと思いますか?
質問に不明な点がある場合は教えてください。できればわかりやすく解説します。
ありがとうございます。
だから、あなたは、いくつかのQPixmaps上に何かを描き、その後、画家にQPixmapsを描きたいですか? –
私は画面に描画されているものを追跡しようとしています。ウィジェットと内部要素を使用すると、Pixmapsを使用すると、要素をグローバルにマップすることができないため、ピックスマップは通常後で画面に描画されるため、扱いにくくなります。したがって、Pixmapに描画された任意の矩形または線は、a)実際に画面に描画されるタイミングを知らないため、b)グローバルポジションの位置がわからないため、問題が発生します。 –
個々のグラフィック要素をトラッキングしてデータにリンクすることを目標とする場合は、別のアプローチを検討することができます。私はそのためにQGraphicsSceneとQGraphicsItemsを使用します。 –