关于Qt制作画板中的恢复与撤销功能
我构思的是建立一个Qvector
class paintarea : public QWidget
{
Q_OBJECT
protected:
private:
QVector<QPixmap>pixmaps;
QVector<QPixmap>::iterator it;
public:
然后在鼠标释放鼠标事件时把当时的pixmap存进数组中
void paintarea::mouseReleaseEvent(QMouseEvent*event)
{
if(event->button()==Qt::LeftButton)
{
endpoint=event->pos();
pixmaps.push_back(pixmap);
}
paint(pixmap);
}
然后再paintevent中控制是否撤销或恢复
void paintarea::paintEvent(QPaintEvent *)
{
QPainter pp(this);
pp.setRenderHint(QPainter::Antialiasing, true);
if(function==recind)
{
it--;
pixmap=(*it);
}
else if(function==recover)
{
it++;
pixmap=(*it);
}
if(drawshape==none||drawshape==eraser)
pp.drawPixmap(0,0,pixmap);
else
pp.drawPixmap(0,0,temppixmap);
}
视情况把要显示在屏幕上的pixmap用容器里的替换掉
运行后点击撤销按钮程序就崩溃了,为什么呢?
哎 我对Qt的绘画事件掌握得不牢,单没法从头看了,最近要考试,没时间,希望有知道的兄弟能给我指出下问题