我是Qt的新手,我试图设计一个简单的应用程序,现在画线。我设法使用QImage
和MouseEvent
(线条开始于鼠标点击并以鼠标释放结束)。Qt:创建一个图像的堆栈
现在我想创建一个仅在mouseMoveEvent
期间出现的“鬼线”。我想用一个Stack(这将允许我稍后管理撤销重做)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();
}
我试图调试尽可能多,但我所有的库尔d意识到,使程序崩溃的行是history = new QStack <QImage>;
,但我不知道它有什么问题。
您可能需要将其定义为'history = new QStack();'而不是?但我认为绝对不需要将指针存储到堆栈对象。只要将它声明为'QStack 历史;'。 –
vahancho
如果你正在做图形,你最好先看看使用[Graphics View Framework](http://doc.qt.io/qt-5/graphicsview.html) – TheDarkKnight
history = new QStack( );以同样的方式坠毁(我已经试过这个)。 –