Qt интерактивный холст

Я действительно новичок в Qt, и мне не нужно ничего сложного. Все, что мне нужно, это иметь возможность объявить какой-то прямоугольник, а затем иметь возможность щелкнуть по нему и также рисовать в нем.

Ни один из учебников, которые я нашел, не содержит ничего, чтобы получить щелчок по объекту (я хотел бы, если возможно, различать левую и правую кнопки мыши, а также получать координаты щелчка и любых последующих движений).

Учебники по рисованию показывают, как рисовать прямо в окне или диалоговом окне, но я уже разместил там несколько кнопок, чтобы помочь с элементами управления.

Я не думаю, что часть рисования является проблемой, это больше часть щелчка. Нужно ли мне создавать новый QWidget? Это сложно?


person widgg    schedule 14.11.2011    source источник


Ответы (1)


Есть несколько разных способов сделать индивидуальный рисунок. Я упорядочу их примерно от высокого уровня к низкому уровню:

  1. Используйте Qt Quick/QML/QDeclarative. QML позволяет использовать Javascript и предоставляет доступ к стандартным API Qt. Если вам нужны простые, простые прямые линии и т. д., это может быть очень простой способ написать ваше приложение. См. примеры QML.
  2. Используйте QGraphicsScene и QGraphicsView. Вам нужно будет понимать модели и представления, чтобы использовать это, но это даст вам всю архитектуру и поддержку, необходимые для рисования чего угодно. См. примеры представления графики.
  3. Подкласс QWidget и реализуйте рисование и управление мышью самостоятельно. Этот довольно низкоуровневый подход может быть очень простым, если ваши потребности достаточно просты. При таком подходе вы контролируете все, и в конечном итоге вам нужно будет переводить координаты в то, что рисуется на экране. пример Tetrix может стать хорошей отправной точкой.

При последнем подходе вам нужно будет реализовать правильные виртуальные методы, чтобы получить доступ к событиям мыши:

virtual void mouseMoveEvent ( QMouseEvent * event )
virtual void mousePressEvent ( QMouseEvent * event )
virtual void mouseReleaseEvent ( QMouseEvent * event )

Вам также потребуется реализовать собственное рисование, переопределив событие рисования. пример AnalogClock подробно описывает все этапы заказная роспись.

person Kaleb Pederson    schedule 14.11.2011