ДТ
Даниил ТетеринНаурыз 29, 2019, 12: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");
    }
}
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

1
Evgenii Legotckoi
  • Наурыз 29, 2019, 6:43 Т.Қ.
  • Жауап шешім ретінде белгіленді.

Добрый день.

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

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

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

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

    Пікірлер

    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
    Кіріңіз немесе Тіркеліңіз
    Ua

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

    • Нәтиже:84ұпай,
    • Бағалау ұпайлары4
    Ua

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

    • Нәтиже:42ұпай,
    • Бағалау ұпайлары-8
    ОК

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

    • Нәтиже:47ұпай,
    • Бағалау ұпайлары-6
    Соңғы пікірлер
    ИМ
    Игорь МаксимовҚар. 22, 2024, 9:51 Т.Қ.
    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
    Evgenii Legotckoi
    Evgenii LegotckoiҚаз. 31, 2024, 11:37 Т.Қ.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
    A
    ALO1ZEҚаз. 19, 2024, 5:19 Т.Қ.
    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
    ИМ
    Игорь МаксимовҚаз. 5, 2024, 4:51 Т.Қ.
    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
    d
    dblas5Шілде 5, 2024, 8:02 Т.Қ.
    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
    Енді форумда талқылаңыз
    f
    firstlunoxodАқп. 15, 2025, 1:46 Т.Қ.
    Рисование на QGraphicsScene при зажатой кнопке мыши Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
    Дмитрий
    ДмитрийАқп. 3, 2025, 4:24 Т.Қ.
    Создание deb-пакета. Как создать ярлык на рабочем столе после установки собственного deb-пакета? Всем привет. Сделал свой deb-пакет с программой. Всё устанавливается и работает. Ставлю по пути /usr/bin/my_application. Как для пользователя при установке пакета сразу создать ярлык на раб…
    NW
    Nayo WaiҚаң. 30, 2025, 7:22 Т.Қ.
    не запускается компьютер!!! Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
    n
    nklyҚаң. 3, 2025, 12:52 Т.Қ.
    Нужно запретить перемещение только некоторых итемов, остальные перемещать можно. Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
    M
    MarselТам. 17, 2023, 12:26 Т.Ж.
    OAuth2.0 через VK, получение email Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.

    Бізді әлеуметтік желілерде бақылаңыз