私はQt/Embeddedの初心者です。 QPainter
を使用してQPixmap
に描画し、QGraphicsScene
に追加します。これが私のコードです。ただし、ピックスマップに描画は表示されません。黒のピックスマップのみを表示します。
int main(int argc, char **argv) {
QApplication a(argc, argv);
QMainWindow *win1 = new QMainWindow();
win1->resize(500,500);
win1->show();
QGraphicsScene *scene = new QGraphicsScene(win1);
QGraphicsView view(scene, win1);
view.show();
view.resize(500,500);
QPixmap *pix = new QPixmap(500,500);
scene->addPixmap(*pix);
QPainter *Paint = new QPainter(pix);
Paint->setPen(*(new QColor(255,34,255,255)));
Paint->drawRect(15,15,100,100);
return a.exec();
}
ビットマップでペイントを行う必要がありますbeforeシーンに追加します。シーンに追加すると、シーンはそれを使用してQGraphicsPixmapItem
オブジェクトを作成します。これは、addPixmap()
関数からも返されます。追加された後にpixmapを更新する場合は、返されたQGraphicsPixmapItem
オブジェクトのsetPixmap()
関数を呼び出す必要があります。
だからどちらか:
...
QPixmap *pix = new QPixmap(500,500);
QPainter *Paint = new QPainter(pix);
Paint->setPen(*(new QColor(255,34,255,255)));
Paint->drawRect(15,15,100,100);
scene->addPixmap(*pix); // Moved this line
...
または:
...
QPixmap *pix = new QPixmap(500,500);
QGraphicsPixmapItem* item(scene->addPixmap(*pix)); // Save the returned item
QPainter *Paint = new QPainter(pix);
Paint->setPen(*(new QColor(255,34,255,255)));
Paint->drawRect(15,15,100,100);
item->setPixmap(*pix); // Added this line
...
QPixmap
は、new
キーワードなしで作成する必要があります。通常は、ポインタではなく、値または参照によって渡されます。その理由の1つは、QPixmap
がその変更を追跡できないことです。 addPixmap
を使用してシーンにピクスマップを追加すると、現在のピクスマップのみが使用されます。それ以上の変更はシーンには影響しません。したがって、変更を加えた後はaddPixmap
を呼び出す必要があります。
また、pixmapを使用する前にQPainter
を破棄して、すべての変更がpixmapに確実に書き込まれるようにし、メモリリークを回避する必要があります。
QPixmap pix(500,500);
QPainter *Paint = new QPainter(&pix);
Paint->setPen(QColor(255,34,255,255));
Paint->drawRect(15,15,100,100);
delete Paint;
scene->addPixmap(pix);