繁体   English   中英

Qt:创建一堆图像

[英]Qt : Create a Stack of image

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

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

这是我在头类中的声明

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()将无效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM