GammaRay — средство интроспекции Qt-приложений

  • Tutorial
Фреймворк Qt предоставляет неплохие средства разработки — входящая в него IDE Qt Creator включает дизайнер, отладчик, профайлер и другие удобные вещи. К сожалению, даже со всем этим иногда не очень понятно, почему приложение в данные момент выглядит так, как выглядит: чего-то не видно, что-то выглядит не так, как ожидалось, где-то неподходящий размер шрифта или неверная картинка.

Часть этих проблем может быть решена в Qt Designer, но только часть. Qt Designer имеет несколько существенных недостатков: во-первых, он неверно отображает положение Qt Quick компонентов в случае активного использования Javascript при расчете их координат и размеров, во-вторых в дизайнере мы видим состояние только «пустой» формы, без загруженных в неё данных. В общем, очень не хватает чего-то вроде инструментов разработчика в любом современном браузере: чтобы можно было посмотреть всё дерево компонентов, найти нужный, увидеть его положение относительно других, свойства, поправить на лету что-то, подобрать цвет\шрифт\размер, увидеть какие обработчики повешены на события и т.д.

И такой инструмент в мире Qt появился! Встречайте — GammaRay, средство интроспекции приложений на Qt. GammaRay понимает, что такое Qt, из чего состоит ваше Qt-приложение, как в нём взаимодействую компоненты, как они выглядят, как генерируются и обрабатываются события и т.д. Давайте посмотрим, что умеет GammaRay.



По-сути GammaRay это не один, а около 20-и различных инструментов, собранных в одно приложение. Каждый инструмент размещён на своей вкладке. Могут быть активны не все вкладки. К примеру, вкладка Quick Scenes активна только если приложение использует Qt Quick компоненты.

Сборка

Бинарников под Windows нет. Исходники здесь: https://github.com/KDAB/GammaRay. Для сборки под Windows + Qt 5.4 мне понадобилось поправить файл CMakeLists.txt, добавив в него следующие строки с указанием путей к моей папке с Qt 5.4:

set(Qt5Core_DIR "D:/Qt/5.4/msvc2010_opengl/lib/cmake/Qt5Core")
set(Qt5_DIR "D:/Qt/5.4/msvc2010_opengl/lib/cmake/Qt5")
set(QT_QMAKE_EXECUTABLE "D:/Qt/5.4/android_x86/bin/qmake.exe")


В остальном всё собирается так, как написано в инструкции (для Windows + Visual Studio):
mkdir build
cd build
cmake -G "NMake Makefiles" ..
nmake
nmake install


Запуск

Теперь нужно собрать какое-нибудь Qt-приложение, вполне подойдут примеры из стандартной поставки Qt. Дальше нужно запустить gammaray, передав ему параметром путь к экзешнику подконтрольного приложения:

gammaray.exe D:\Qt\Examples\Qt-5.4\quick\demos\build-stocqt-Desktop_Qt_5_4_0_MSVC2010_OpenGL_32bit-Debug\debug\stocqt.exe


Вкладка Quick Scenes

Я начну с самой для меня интересной вкладки — Quick Scenes. Именно она является Qt-аналогом тех самых браузерных Developer Tools, о которых я писал выше. В левой верхней части вкладки мы видим дерево Qt Quick компонентов, причём не в «изначальной» его форме, а со всеми созданными на рантайме объектами.


Мы можем выбрать нужный объект в дереве — и он будет подсвечен на превью в нижней части окна.


Мы можем посмотреть свойства этого объекта в правой части окна, изменить их. Таким образом удобно подбирать размеры элементов, шрифты, цвета, смотреть как будет помещаться текст разной длины в отведённых ему границах.


Мы можем вызвать определённый метод компонента. К примеру, для MouseArea мы можем сгенерировать «клик», что приведёт к вызову логики его обработки.


Окно превью имеет несколько режимов и, кстати, является «двунаправленным» — т.е. выполняемые в нём действия влияют не только на превью, но и на само приложение.

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


Вкладка Objects

Здесь перечислены вообще все Qt-объекты вашего приложения. Функционал: перечисление свойств, вызов методов, просмотр сигналов-слотов. Немного трудновато найти конкретный объект, но есть фильтр, иногда помогает.


Вкладка Models

Должна показывать модели, используемые в приложении (наследников QAbstractListModel). В моём случае приложение падало всякий раз при открытии этой вкладки. Возможно, попалась нестабильная версия GammaRay (брал ведь прямо с GitHub).


Вкладка Timers

Все таймеры приложения


Вкладка Resources

Позволяет просмотреть все ресурсы Qt-приложения (картинки, звуки, шейдеры, QML-код) а также экспортировать их при необходимости. Не сильно полезная вещь при работе со своим приложением (всё то же самое вы видите в дереве ресурсов в Qt Creator), но может помочь при анализе чужой программы.


Signals

Показывает события, генерируемые всеми Qt-объектами в приложении. Интерфейс пока не очень удобен (слабо понятно, какой именно экземпляр определенного типа сгенерировал события, не хватает возможностей группировки и гибкости поиска нужных объектов). Тем ни менее, при определенной сноровке позволяет быстро увидеть последовательность событий, так сказать, «ухватить общую картинку».


State Machines

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


Остальные вкладки GammaRay показались мне менее интересными, хотя мало ли что кому нужно: просмотр шрифтов, локалей, логов, мета-объектов, мета-типов, переменных окружения, стилей компонентов.

В общем, GammaRay — отличная утилита, хорошо вписывающаяся в инфраструктуру Qt и позволяющая сэкономить несколько минут там, где их действительно легко можно сэкономить.
  • +28
  • 12.4k
  • 6
Инфопульс Украина
0.00
Creating Value, Delivering Excellence
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 6

    0
    Вкладка Quick Scenes
    Не отображаются картинки в этом разделе.
      0
      В смысле в этой статье на Хабре не отображаются, или во вкладке в самой программе?
        0
        В статье, но уже все появилось.
      0
      Это просто очень круто. Небольшая революция.
        0
        Спасибо за статью.
        Не понимаю, зачем они используют CMake вместо qmake…
          0
          Инструмент пока сырой, но потенциал хороший.
          Очень порадовал анализатор Quick сцены, но не хватает возможности кликать в превью на элементы и видеть их в дереве.

          Only users with full accounts can post comments. Log in, please.