Qt:创建一堆图像

Qt : Create a Stack of image

我是 Qt 的新手,我正在尝试设计一个简单的画线应用程序。我设法使用 QImageMouseEvent 绘制线条(线条从鼠标单击开始到鼠标释放结束)。

现在我想创建一个仅在 mouseMoveEvent 期间出现的 "ghost" 行。我想使用 QImage 的堆栈(这将允许我稍后管理 undo-redo)来做到这一点。但是,我什至无法构造堆栈,程序崩溃没有任何解释

这是我在 header class

中的声明
private:
    QImage image;
    QStack <QImage> *history

这是我的构造器

Painty::Painty() : image(1920,1080, QImage::Format_ARGB32)
{
    image.fill(Qt::white);
    history = new QStack <QImage>;
}

这是我的功能:

void Painty::mousePressEvent(QMouseEvent *event)
{
     f_point = event->pos();
}

 void Painty::mouseReleaseEvent(QMouseEvent *event)
 {
    l_point = event->pos();
    addLine();
    history->push(image);
 }

 void Painty::mouseMoveEvent(QMouseEvent *event)
 {
    l_point = event->pos();
    addLine();
 }


 void Painty::paintEvent(QPaintEvent *event)
 {
    QWidget::paintEvent(event);
    QPainter painter(this);
    painter.drawImage(0,0,image);
 }

void Painty::addLine() 
{
     image=history->top();
     QPainter paint(&image);
     paint.drawLine(f_point,l_point);
     paint.end();
     this->update();
}

我尽可能多地调试,但我能意识到的是导致程序崩溃的行是 history = new QStack <QImage>;,但我不知道它出了什么问题。

您需要在构造函数的末尾将空图像压入堆栈,或者交换行

addLine();
history->push(image);

mouseReleaseEvent(...).

否则在第一次调用addLine()history->top()将无效。