我是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( );以同樣的方式墜毀(我已經試過這個)。 –