Загрузка...
Linux
Новости, статьи, обсуждения, - все что связано с GNU Linux, FreeBSD, OpenBSD, Sun Solaris, Mac OS X и другими системами. Если вы интересуетесь данной темой - добро пожаловать в сообщество.
     

C++ и создание интерфейсов "мышкой" полностью совместимы?

14.04.10, 22:05
Автор ggg

Хотелось бы чуть-чуть пофлеймить на эту тему. Недавно начал делать делать небольшую программку на C++ с использованием Qt. Установил QtCreator - хорошая среда разработки, даже и спорить то не буду. Но вот возник такой вопрос: нужно сделать виджет, на котором я буду сам рисовать линии и кружочки, как это сделать? Я конечно не против, что сделать это не сложно, унаследовался от класса QWidget, переопределил функцию paintEvent и радуйся жизни, но при этом, для того, чтобы использовать созданный виджет в QtCreator-е придется написал плагин для данной IDE, скомпилировать его в виде библиотеки и подключить.

А если у меня таких виджетов будет 2, 3, 10 и в каждом функция paintEvent будет отличаться? Мне тогда придется 10 плагинов писать к QtCreator? По-моему это ужасно. С другой стороны, я подумал, что можно было бы сделать 1 виджет а-ля MyWidget который в paintEvent будет генерировать некоторое событие, на которое я смогу повесить несколько функций. Тогда нужен будет только 1 плагин, но, как говорил мой научный руководитель - мы становимся заложниками того, что из слотов, которые мы будем соединять с сигналом, генерируемым в MyWidget::paintEvent я не смогу иметь доступа к приватным методам виджета.

Как же быть в такой ситуации? С одной стороны не хочется создавать плагин ради каждой функции paintEvent, с другой - мне может понадобиться доступ к внутренностям QWidget-а. Господа, кто более прокачан в Qt, подскажите плз, как быть? Вариант - не создавать интерфейсы мышкой а делать все руками - хорош, но в данной теме не рассматривается, хочется именно мышкой. А может быть мне и не понадобится доступ к внутренностям QWidget?

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

  1. какие есть способы рисования на QWidget-е без непосредственного наследования?
  2. можно ли отнаследоваться от QWidget-а только один раз, но на этапе инициализации программы задавать для конкретного виджета алгоритм рисования?
  3. сталкивались ли вы с описанной в посте проблемой и если да - как решили ее?

Комментарии

данную проблему создатели QtDesigner-а предвидели и создали специальную штуку, под названием Promoting Widgets Она в точности решает представленную задачу:

  • создается виджет класса QWidget
  • в дизайнере производится щелчок правой кнопкой мыши по данному виджету и выбирается пункт меню Promoted Widgets
  • в появившемся диалоговом окне выбирается название класса, который будет отвечать за создаваемый виджет и заголовочный файл в котором объявлен данный класс
  • создается сам класс (ну там заголовочный и cpp файлы)

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

хм, а ларчик-то просто открывался :) Спасибо большое :)

было бы круто заиметь статью “основы работы в QtCreator-е”, чтобы использовать все его возможности (хоткеи, справку, автодополнение и т.п.) а не использовать эту мощную IDE в качестве блокнота с подсветкой синтаксиса

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