UPD: Информация больше не актуальна, теперь подобные средства кодогенерации встроены в Qt Creator.
Долгое время пользовался для написание программ, с использованием Qt4 интегрированную среду разработки QDevelop, и хотя она почти всем устраивает, за несколькими исключениями:
- непонятно работает автодополнение
- на 500 строках и больше начинает ощутимо поддтормаживать
И все бы ничего, да только даже в svn тишина - комитов не было уже почти год, жаль, если проект умер, а то, такую совокупность качеств нет нигде:
- написана только на Qt4
- есть менеджер классов, через который можно создавать автоматически методы/переменные (для последних сразу можно создать get/set функцию, хотя вообще в этой реализации есть так же свои недоделки)
- в браузере файлов, по щелчку правой кнопки мыши на файле формы, можно выбрать пункт Dialog Subclassing… в котором отобразятся все компоненты формы, и для них можно сразу создать обработчик, который автоматом пропишется в связанном классе.
- при этом редактирование формы отдается Designer’у как внешней утилите, что для меня очень удобно (да и вообще - для небольших экранов)
- при этом контекстная справка отравляет нас в Assistant, что опять таки, для меня очень удобно.
- поддержка .pro, хоть и сказано, базовая, но через параметры проекта, в интуитивно понятной форме, можно управлять почти всем.
К сожалению факт, быстродействия и удобства написания кода, вынудил меня начать поиски другой IDE, и вот к чему они привели:
- ни у одной IDE нет удобного менеджера классов:
- Eclips/Netbeanse - вроде монстры, но не осилил, как там создать через мастер новый член класса
- Monkey Studio 2 - аналогично, хотя бегать по классам умеет
- Edyuk - только бегает по классам
- Из вышеперечисленных только в Edyuk есть аналог Subclassing у QDevelop, и реализовано схожим образом, но, к сожалению - падуч он (версия из svn, а стабильная 1.1.0 тоже давно не обновлялась)
Итак, нарочно не упомянул о Qt Creator, хотя, вроде среда от разработчиков, должна рвать всех, но ннннннет: менеджера классов нет вообще.
Да, отчасти, при навигации, с лихвой хватает инструмента “Обзор” (вызывается Ctrl+K), но не для создания новых элементов. Рыба нового класса создается через Файл-Новый файл или проект… а далее разделы:
- C++ / Класс C++
- Qt / Класс формы Qt Designer (форма и связанный класс)
Аналога subclassing нет, но во встроенном редакторн формы, в контекстном меню, имеется пункт “Go to slot…”, но это требует открытия формы внутри Qt Creator (тут мой совет - Alt+0 ваш друг, что бы временно убрать боковую панель, и потом вернуть её обратно), а места там мало (или я один придурок, кодирую на своем Eee PC 1000? ;))
Возможности настройки .pro показались скупыми, но я тут, возможно, ещё не со всем разобрался.
При этом очень приятный код самого проекта, очень шустрое автодополнение.
Да, очень не хватает создания методов и членов класса через мастер, но тут же есть и плюсы - контролируется внешний вид лучше, форматирование, следование политикам кодирования. Поэтому все своё неудобство свел к следующему:
Неудобно вручную прописывать новый метод класса: нужно его прописать в объявлении класса, а потом ещё и в реализации
немного подумал, посмотрел на существующую функциональность (есть переход между объявлением/реализацией) и сформировал следующее:
Написать функциональность по автоматическому созданию реализации метода класса, если он не существует, при попытке перейти к нему. Аналогично, для прототипа функции и её реализации.
Из дополнительных требований:
- реализация будет создана в файле, совпадающим с текущим по имени, за исключением последнего элемента расширения и расположенным в том же каталоге, что и текущий
- реализация будет создана только в том случае, если целевой файл включает текущий (делается
#include
) - если реализации нет, выдавать вопрос - нужно ли создавать её или нет. Если нет - завершить обработку, если да - попытаться создать и перейти к целевому коду.
На пальцах: если прототип описан в .h файле, и рядом есть такой же .c/.cpp файл, который делает #include нашего .h файла и не содержит реализации (сиречь - мы имеет только описание функции), то при попытке перехода спрашиваем пользователя - нужно ли создавать реализацию, если да - создаем в конце файла шаблон функции и позиционируемся туда.
Поумничал и хватит, в результате нескольких часов, родился такой патч:
autocreate-implementation.diff
Применяется к версии Qt Creator из Git (от 2010-02-11), скорее всего применится и к последней официальной версии.
А вот немного как это выглядит у меня: