Добрый день, помогите пожалуйста.
Есть два класса, Line и Triangle
В Line в функцию draw() передаётся указатель на QPainter и происходит отрисовка
Line::Line(QWidget *parent, Point *pt1, Point *pt2) : QWidget(parent), point1(pt1), point2(pt2)
{
setMinimumSize(parent->size());
}
void Line::draw(QPainter *painter)
{
painter->setPen(QPen(Qt::red, 1, Qt::SolidLine));
qreal x1 = point1->getX(), y1 = point1->getY(),
x2 = point2->getX(), y2 = point2->getY();
qreal k, b, y;
k = (y2 - y1) / ( x2 - x1 );
b = y1 - k * x1;
if(x1 > x2) {
int t = x1; x1 = x2; x2 = t;
}
if (x1 != x2)
{
for(double x = x1; x < x2; x += 0.1)
{
y = k * x + b;
painter->drawPoint(QPointF(x, y));
}
}
else
{
if (y1 > y2) {
int ty = y1; y1 = y2; y2 = ty;
}
for(qreal y = y1; y < y2; y++)
painter->drawPoint(QPointF(x1, y));
}
}
В классе Triangle переопределен paintEvent. Там создаются три объекта Line (объявлены в private) и происходит их отрисовка
void Triangle::paintEvent(QPaintEvent *)
{
ln1 = new Line(this, A, B);
ln2 = new Line(this, A, C);
ln3 = new Line(this, B, C);
QPainter painter(this);
ln1->draw(&painter);
ln2->draw(&painter);
ln3->draw(&painter);
}
В MainWindow создаётся объект Triangle (объявление в private), в качестве родителя передаётся прямоугольный виджет, созданный в дизайнере.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
trgl = new Triangle(ui->graphicArea, 50, 50, 50);
ui->graphicArea->setAttribute(Qt::WA_OpaquePaintEvent);
ui->graphicArea->show();
Проблема вот в чем: есть кнопка, при нажатии на которую треугольник должен перерисоватся с заданными координатами, но вместо перерисовки рисуется новый треугольник, старый остаётся на месте (пробовал не использовать new, а менять координаты через сэттер, не помогло).
void MainWindow::setTriangleButton()
{
qreal x, y, len;
x = ui->TriangleXCoord->value();
y = ui->TriangleYCoord->value();
len = ui->TriangleLength->value();
trgl = new Triangle(ui->graphicArea, x, y, len);
trgl->show();
}
Почему так?
Заливать фон полностью перед пересозданием объекта не выйдет, у меня там не только треугольник.
Буду очень благодарен за помощь!