s
Sept. 8, 2019, 6:40 p.m.

Qpainter

QPainter

Добрый день!

Прошу подскажите пожалуйста, как реализовать отрисовку например круга в дочернем виджете на форме? Смотрел видео-урок Евгения, там всё происходит в родительской форме. соответственно если написать QPainter painter(ui->widget_4) то ничего не рисуется и появляется ошибка:
qwidget:paintengine should no longer be called
Qpainter:setpen: Painter not active
Qpainter:setbrush:Painter not active
Как заставить QPainter рисовать в дочерних виджетах?

2
The question is asked by the articleQt/C++ - Lesson 020. QPainter – Introduction to drawing

Do you like it? Share on social networks!

4
Evgenii Legotckoi
  • Sept. 8, 2019, 7:21 p.m.

Добрый день. QPainter активен только внутри метода paint. поэтому нужео наследоваться от класса qwidget и переопределять метод paint. то естьтоже самое, что и в той статье, только можно без ui формы обойтись.

    s
    • Sept. 8, 2019, 7:31 p.m.
    • The answer was marked as a solution.

    Евгений, а Вы не могли бы более подробно описать переопределение метода paint и наследовательность от класса qwidget?

      Evgenii Legotckoi
      • Sept. 10, 2019, 4:05 p.m.

      А ошибся с названием метода. Также paintEvent нужно переопределять.

      widget.h

      1. #ifndef WIDGET_H
      2. #define WIDGET_H
      3.  
      4. #include <QWidget>
      5.  
      6. class Widget : public QWidget
      7. {
      8. Q_OBJECT
      9.  
      10. public:
      11. explicit Widget(QWidget *parent = nullptr);
      12. ~Widget();
      13.  
      14. protected:
      15. virtual void paintEvent(QPaintEvent *event) override;
      16.  
      17. };
      18.  
      19. #endif // WIDGET_H

      widget.cpp

      1. #include "widget.h"
      2. #include <QPainter>
      3.  
      4. Widget::Widget(QWidget *parent) :
      5. QWidget(parent)
      6. {
      7. }
      8.  
      9. Widget::~Widget()
      10. {
      11. }
      12.  
      13. void Widget::paintEvent(QPaintEvent *event)
      14. {
      15. Q_UNUSED(event);
      16. QPainter painter(this); // Создаём объект отрисовщика
      17.  
      18. }
        s
        • Sept. 11, 2019, 1:16 a.m.

        Благодарю!

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • AK
            April 1, 2025, 11:41 a.m.
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
          • Evgenii Legotckoi
            Oct. 31, 2024, 11:37 p.m.
            Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup