Qt clickable canvas - PullRequest
       5

Qt clickable canvas

0 голосов
/ 14 ноября 2011

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

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

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

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

1 Ответ

2 голосов
/ 14 ноября 2011

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

  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 подробно описывает все этапы пользовательского рисования.

...