我是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();
}
答案 0 :(得分:17)
您需要在位图之前进行绘画,然后将其添加到场景中。当您将其添加到场景中时,场景将使用它来构造QGraphicsPixmapItem
对象,该对象也由addPixmap()
函数返回。如果要在添加pixmap后更新pixmap,则需要调用返回的setPixmap()
对象的QGraphicsPixmapItem
函数。
所以:
...
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
...
答案 1 :(得分:10)
QPixmap
关键字的情况下创建 new
。它通常通过值或引用传递,而不是通过指针传递。其中一个原因是QPixmap
无法跟踪其更改。使用addPixmap
向场景添加像素图时,仅使用当前的像素图。进一步的改变不会影响现场。因此,您应该在进行更改后致电addPixmap
。
此外,您需要在使用像素图之前销毁QPainter
,以确保所有更改都将写入像素图并避免内存泄漏。
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);