Qt:创建一堆图像
Qt : Create a Stack of image
我是 Qt 的新手,我正在尝试设计一个简单的画线应用程序。我设法使用 QImage
和 MouseEvent
绘制线条(线条从鼠标单击开始到鼠标释放结束)。
现在我想创建一个仅在 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()
将无效。
我是 Qt 的新手,我正在尝试设计一个简单的画线应用程序。我设法使用 QImage
和 MouseEvent
绘制线条(线条从鼠标单击开始到鼠标释放结束)。
现在我想创建一个仅在 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()
将无效。