В проекте рисую графики с помощью QCustomPlot. Графики рисуются, я счастлив. Захотелось мне нарисовать отдельный прямоугольник не связанный с QCustomPlot. Раньше делал так:
1) В классе QMainWindow делал переопределение для paintEvent:
protected: void paintEvent(QPaintEvent*) override;
2) Потом в mainwindow.cpp делал определение функции paintEvent:
void MainWindow::paintEvent(QPaintEvent *) { QPainter painter; QBrush brush; QColor color(0, 0, 255); painter.begin(m_mainWidget); painter.setRenderHint(QPainter::Antialiasing, true); painter.setPen(QPen(Qt::black, 2, Qt::SolidLine)); // Обрисовка. color.setRgb(100, 0, 0); // Настройка цвета. brush.setColor(color); // Применение настроек цвета. brush.setStyle(Qt::SolidPattern); // Настройка стиля заливки. painter.setBrush(brush); // Заливка. painter.drawRect(QRect(m_mainWidget->width()-100, m_mainWidget->height()-100, 200, 200)); // Прорисовка прямоугольника. painter.end(); }
3) Где надо, например по нажатию кнопки, вызывал функцию repaint() и всё рисовалося.
Но тут не заработало. Отладчик просто не переходит в мой paintEvent. Покопал в QCustomPlot, оказалось в библиотеке тоже используется paintEvent. И когда я вызываю в своей программе repaint(), то происходит переход в paintEvent, который переопределён в QCustomPlot, а не в мой. Я понимаю, что можно запихнуть своё рисование в библиотеку, но не хочется пачкать библиотечный файл. Помогите убогому сделать правильно.
Можешь проект скинуть с проблемой?
@aveal Проблему решил. Нарисовал свой прямоугольник виджетом и меняю его цвет когда надо.