Я новичок в Qt, и я пытаюсь создать простое приложение, которое рисует линии на данный момент. Мне удалось нарисовать линии, используя QImage
и MouseEvent
(линия начинается с щелчка мыши и заканчивается в выпуске мыши).Qt: Создать стек image
Теперь я хотел бы создать линию «призрак», которая появляется только во время 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 history;'. –
vahancho
Если вы делаете графику, вам может быть лучше взглянуть на использование [Graphics View Framework] (http://doc.qt.io/qt-5/graphicsview.html) – TheDarkKnight
history = new QStack (); разбился так же (я уже пробовал этот). –