gpt4 book ai didi

c++ - Qt : Create a Stack of image

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:14 25 4
gpt4 key购买 nike

我是 Qt 的新手,我正在尝试设计一个简单的画线应用程序。我设法使用 QImage 画线和 MouseEvent (该行从鼠标点击开始,到鼠标松开结束)。

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

这是我在头文件中的声明

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

关于c++ - Qt : Create a Stack of image,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32987360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com