Есть ли полезные инструменты для диагностики Qt-макетов и интервалов?
См. также соответствующий вопрос: Как отлаживать проблемы макета Qt
У меня есть сложные иерархии виджета, которые я пытаюсь выложить, и я сталкиваюсь с обычными проблемами вещей, которые находятся ближе или дальше друг от друга, чем я ожидаю. Я нашел очень полезную технику - создать таблицу стилей со списком разных цветов фона и границы для виджетов в разных точках иерархии. Я также добавил QFileSystemWatcher
, чтобы перезагрузить таблицу стилей каждый раз, когда она была сохранена, что позволяет быстро изменять, не перестраивая.
Однако я продолжаю думать, что должен быть лучший способ. Посмотрите на такие инструменты, как панель инструментов веб-разработчика Firefox, которая будет делать такие вещи, как отметки границ или показать иерархию элементов управления. Существуют ли какие-либо инструменты или библиотеки, которые будут делать это для Qt-приложений?
ОБНОВЛЕНИЕ 5 мая 2016 г.
Я нашел один из самых простых и наиболее информативных способов диагностики проблем с интервалами - сбросить иерархию виджетов с точки зрения QLayouts. Я создал образец кода, который содержит информацию о подсказках размеров, элементах проставки, отступов и полях содержимого: https://gist.github.com/pjwhams/6ebc040db3ab55615eafd831e184e39c
Еще один инструмент: https://github.com/robertknight/Qt-Inspector
Ответы
Ответ 1
У меня был связанный следующий вопрос в другом потоке, к которому Дмитрий придумал отличный метод, который привел к хорошему решению: Наложение наложения поверх окна приложения
EDIT: я также нашел полезную технику, скрытую в документации QLayout::itemAt()
, которая показывает, как итерации через QLayoutItems
в макете и нарисуйте их прямоугольники
Ответ 2
Не могли бы вы использовать QHoverEvent, чтобы добавить темную рамку или всплывающее окно с идентификатором при каждом наведении на элемент?
Ответ 3
То, что вы ищете, - это в основном инструмент, который анализирует QObject или, скорее, иерархию QWidget и добавляет аннотации. Это именно то, что GammaRay около. Это лицензия GPL и поэтому свободно доступна. Вы можете получить дополнительную информацию на странице GammaRay. Я использовал его несколько раз, и он работает, как ожидалось.
Ответ 4
Поздно, но QObject:: dumpObjectTree() помог мне решить мои проблемы.
Сбрасывает дерево дочерних элементов на вывод отладки.