这是我第一次使用Qt,我需要用Qt制作一个类似于MSPaint的软件。然而,我在绘制线条时遇到了问题。我可以通过在屏幕上点击某处并释放另一个位置来绘制一条线,但当我绘制第二条线时,之前的线会被擦除。如何在绘制新项目时保留先前绘制的项目?
void Canvas::paintEvent(QPaintEvent *pe){
QWidget::paintEvent(pe);
QPainter p(this);
p.drawPicture(0,0,pic);
}
void Canvas::mousePressEvent(QMouseEvent *mp){
start = mp->pos();
}
void Canvas::mouseReleaseEvent(QMouseEvent *mr){
end = mr->pos();
addline();
}
void Canvas::addline()Q_DECL_OVERRIDE{
QPainter p(&pic);
p.drawLine(start,end);
p.end();
this->update();
}
Canvas是继承自QWidget的类,它有两个QPoint属性start和end。
类内容:
class Canvas : public QWidget{
Q_OBJECT
private:
QPoint start;
QPoint end;
QPicture pic;
public:
Canvas(){paint = false;setAttribute(Qt::WA_StaticContents);}
void addline();
protected:
void paintEvent(QPaintEvent *);
void mousePressEvent( QMouseEvent * );
//void mouseMoveEvent( QMouseEvent * );
void mouseReleaseEvent( QMouseEvent * );
};
pic
是他的缓冲区,绘图器不应该影响缓冲区数据。这并不意味着保留绘图器是一个坏主意。 - dtechpic
似乎具有类作用域。它应该在不同的调用之间保持不变。从迄今为止发布的代码中,我没有看到任何清除pic
的内容。 - dtechpic
重新实现的paintEngine()
函数可能存在实现缺陷。在我们获得更多信息之前,我们无法提供进一步的帮助。 - Poriferous