s
8 сентября 2019 г. 18:40

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
Вопрос задан по статьеQt/C++ - Урок 020. QPainter - знакомство с рисованием в Qt

Вам это нравится? Поделитесь в социальных сетях!

4
Evgenii Legotckoi
  • 8 сентября 2019 г. 19:21

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

    s
    • 8 сентября 2019 г. 19:31
    • Ответ был помечен как решение.

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

      Evgenii Legotckoi
      • 10 сентября 2019 г. 16:05

      А ошибся с названием метода. Также 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
        • 11 сентября 2019 г. 1:16

        Благодарю!

          Комментарии

          Только авторизованные пользователи могут публиковать комментарии.
          Пожалуйста, авторизуйтесь или зарегистрируйтесь
          • Последние комментарии
          • Evgenii Legotckoi
            16 апреля 2025 г. 17:08
            Благодарю за отзыв. И вам желаю всяческих успехов!
          • IscanderChe
            12 апреля 2025 г. 17:12
            Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
          • AK
            1 апреля 2025 г. 11:41
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            9 марта 2025 г. 21:02
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            9 марта 2025 г. 16:14
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…