Нужна небольшая помощь с классами рисования Qt

StackOverflow https://stackoverflow.com/questions/1684941

  •  18-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать программу рисования (рисуйте там, где когда-либо обнаруживается нажатие / удержание мыши), но у меня возникают проблемы с использованием Qt Рисовальщика QPainter.Я прочитал документацию на их веб-сайте, и я все еще немного растерян.Было бы неплохо дать ссылку на учебник, которого нет на их веб-сайте, или, возможно, объяснить мне, как я могу выполнить это в Qt.Единственное, что мне удалось сделать, это нарисовать точки на виджете.

Это было полезно?

Решение

Проверьте Каракули пример, который поставляется с Qt, делает именно то, что вы хотите.

Мы переопределяем обработчики событий мыши для реализации рисования, обработчик событий рисования для обновления приложения и обработчик событий изменения размера для оптимизации внешнего вида приложения.Кроме того, мы переопределяем обработчик событий close для перехвата событий close перед завершением работы приложения.

В примере также показано, как использовать QPainter для рисования изображения в режиме реального времени, а также для перерисовки виджетов.

Другие советы

Используйте QtAssistant и перейдите к записи QPainter.Оттуда вы увидите ссылки на примеры программ, использующих различные функции QPainter, например этот: http://doc.trolltech.com/4.5/painting-basicdrawing.html

QtAssistant должен быть вашим ресурсом номер один.Это довольно тщательно.Тогда, если это не поможет, я рекомендую форумы по адресу QtCentre.Это знающие ребята.

Я могу только догадываться, в чем ваша проблема, но я предполагаю, что вы столкнулись с давней проблемой, связанной с тем, что PaintEvent используется для обновления страницы.Способ реализации программы рисования заключается в том, чтобы сначала создать QPixmap или QImage в качестве буфера рисования.Затем нарисуйте его методами нажатия/перемещения/отпускания мыши.Когда вы обновили буфер рисования, все обновится (и будьте пай-мальчиком и укажите область, нуждающуюся в обновлении).Это вызовет вызов вашего метода PaintEvent, где вы просто выводите запрошенный прямоугольник (QPaintEvent::rect()) на экран.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top