Qt:创建一堆图像

时间:2015-10-07 08:29:06

标签: c++ qt stack qimage

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

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

这是我在标题类

中的声明
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>;,但我不知道它有什么问题。

1 个答案:

答案 0 :(得分:2)

您需要将空图像推送到构造函数末尾的堆栈,或者交换行

addLine();
history->push(image);
mouseReleaseEvent(...)中的

否则,第一次拨打addLine() history->top()时无效。