Политика конфиденциальностиКонтактыО сайтеОтзывыGitHubDonate
© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
ДТ
28 марта 2019 г. 18:32

QPolygon

QPainter, QPolygon, Qt

Возникла небольшая проблемка. Уверен, что это решается довольно легко, но, всё же, никак не могу найти решение. Хочу нарисовать что-нибудь при помощи полигонов, а для этого я вручную вбиваю координаты треугольников в форму, а понравившиеся сохраняю в лист. Штука в том, что когда я меняю в форме координаты треугольника, перерисовывается старый, а не создаётся новый, это, на самом деле, мне только на руку, но мне нужно знать, как сделать так, чтобы создавался новый. Потому что сейчас я понятия не имею, каким образом мне нужно писать отрисовку по координатам с листа.

void MainWindow::drawTriangle(int x1, int y1, int x2, int y2, int x3, int y3, QPainter *painter, QPolygon *poly)
{
    painter->setRenderHint(QPainter::Antialiasing, true);
    QPen pen(Qt::gray);
    painter->setPen(pen);
    *poly << QPoint(width() * x1 * 0.01, height() * y1 * 0.01);
    *poly << QPoint(width() * x2 * 0.01, height() * y2 * 0.01);
    *poly << QPoint(width() * x3 * 0.01, height() * y3 * 0.01);
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPolygon poly;
    drawTriangle(ui->lineEdit_1->text().toInt(), ui->lineEdit_2->text().toInt(), ui->lineEdit_3->text().toInt(),
                 ui->lineEdit_4->text().toInt(), ui->lineEdit_5->text().toInt(), ui->lineEdit_6->text().toInt(), &painter, &poly);
    painter.drawPolygon(poly);
}

void MainWindow::on__go_button_clicked()
{
    this->update();
}

void MainWindow::on__save_button_clicked()
{
    int a[] = {ui->lineEdit_1->text().toInt(), ui->lineEdit_2->text().toInt(), ui->lineEdit_3->text().toInt(),
        ui->lineEdit_4->text().toInt(), ui->lineEdit_5->text().toInt(), ui->lineEdit_6->text().toInt()};
    for (int i = 5; i >= 0; i--)
        list << a[i];
    for (int i = 0; i < 6; i++)
    {
        ui->textEdit->setText(ui->textEdit->toPlainText() + QString::number(list.takeLast()) + "\n");
    }
}
Возврат 10% от суммы заказа отеля на Booking
Возврат 10% от суммы заказа отеля на Booking
Предлагаем ссылку с 10% возвратом от суммы заказа при бронировании отеля через Booking
1

Добрый день.

Вам для этого нужно использовать графическую сцену QGraphicsScene и добавлять на неё графические элементы QGaphicsItem - это будет наиболее правильным решение в вашем случае.

Там просто нужно будет наследоваться от QGraphicsItem и переопределить метод paint.

Вот несколько статей, где это подробно описывается

А в вашем случае вы просто переустанавливаете точки, которые при каждом обновлении окна отрисовываются снова, таким образом рисунок в окне перерисовывается. Но это не является самостоятельным объектом.

1

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AA
17 апреля 2019 г. 19:40
Anton Ablin

Qt - Тест 001. Сигналы и слоты

  • Результат:73баллов,
  • Очки рейтинга1
E
17 апреля 2019 г. 18:16
Evgeny

Qt - Тест 001. Сигналы и слоты

  • Результат:100баллов,
  • Очки рейтинга10
E
17 апреля 2019 г. 18:14
Evgeny

Qt - Тест 001. Сигналы и слоты

  • Результат:78баллов,
  • Очки рейтинга2
Последние комментарии
U
18 апреля 2019 г. 15:37
Unreal_man

А как иконку в хедер задать?
u
18 апреля 2019 г. 2:15
uaa

доброго времени,большое спасибо за пример для начинающего)при адаптации к своему проекту столкнулся с таким ньансом:в vepolyline.h в 47 строке нужна инициализация по умолчанию: int m_pointF...
E
11 апреля 2019 г. 12:49
Evgeny

Спасибо за ответ) У меня компоновщик на нее ругался просто. Оказалось, просто забыл Q_OBJECT в начале класса указать.
11 апреля 2019 г. 12:29
Евгений Легоцкой

Добрый день. Вы имели ввиду реализацию? Для сигналов в Qt реализация не пишется, это всё генерируется в moc файлах под капотом Qt.
E
11 апреля 2019 г. 12:15
Evgeny

Здравствуйте. А где описание функции signal1()?
Сейчас обсуждают на форуме
R
19 апреля 2019 г. 9:55
RED_Spider

мені важко це зараз навіть перевірити, тому що знайшов коміт, це ще було в 2016 році, і цей код не буде працювати коректно зараз, єдине скажу що це були QThread
i
17 апреля 2019 г. 15:03
ilya.guzikov

BlinCT, на стороне ++ это делать необходимо так как в qml при использовании функции append происходит перерисовка всех точек лини(как я понимаю) и из-за этого при использовании больших массиво...
10 апреля 2019 г. 11:20
Алексей Внуков

может тоже кому надо будет - QML не принимает QVector<QVector<int>> , при попытке вывести полученый вектор QML показывает что это QVariant(QVector<QVector<int> ...
SN
10 апреля 2019 г. 9:36
Stanislav Nykytiuk

Как реализовать такое меню, что бы нажмаешь меню подменю и выбор позиции? Данные меню и подменю в базе SQL.
Присоединяйтесь к нам в социальных сетях

Для зарегистрированных пользователей на сайте присутствует минимальное количество рекламы