@Mitbaru

Работа с рисованием в Qt. Почему не получается рисовать после оператора if?

Всем привет! Прошу помощи) работаю с QT на плюсах сейчас. Возникла такая проблема: функция проверяет кнопки меню на клик, все три кнопки работают, почему то выводит только информацию в qDebug, но рисовать не хочет, а именно painter->drawLine(0, 0, 200, 200); не работает.
Прошу обратить внимание на то, что painter.drawRect(10,10,200,200) который используется до if, успешно работает и рисует.
Почему так? Заранее спасибо)
642dc9a7b0eb2309335879.png
  • Вопрос задан
  • 267 просмотров
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Дело тут вот в чём. События рисования могут проскакивать когда угодно по любому чиху, и потому механизмы перерисовки надо делать такие, что когда угодно этот paintEvent() проскочит — изображение в окне будет корректно восстановлено.

Например:
enum class Shape { NONE, LINE, ELLIPSE, RECTANGLE };

... в форме...
Shape shareToDraw = Shape::NONE;

…соответственно в коде нажатия кнопок устанавливаем эту shapeToDraw,
а paintEvent реагирует на неё.

У вас же, как только paintEvent() повторно проскочит, ни одно событие не будет отмечено, и он ничего не сделает. А ведь он может дважды проскочить, чтобы нарисовать непрямоугольную область. Или если оконный менеджер что-то попросил.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Не нужно делать setChecked(false) в обработчике paintEvent, потому что paintEvent случается довольно таки асинхронно по отношению к событиям генерируемым UI.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Тут может быть две разные проблемы. Может чек-боксики не работают. Попробуй так. Будет рисоваться?
painter.setPen(....);
painter.drawRect(10,10,200,200);
painter.drawLine(0,0,200,200);

Или стиль рисования линии такой невидимый что ее не видно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы