Подтвердить что ты не робот

Как отлаживать проблемы макета Qt

У меня сложный диалог, и он заполнен пробелами, и я не могу его сжать. В Designer у него много компонентов, которые затем динамически скрываются, а некоторые из них динамически добавляются. Я добавил сброс политики размера, подсказок размеров и минимальных размеров, но до сих пор не могу понять, почему Qt не позволит мне перетащить его меньше.

Должны быть некоторые инструменты или методы устранения неполадок.

Пожалуйста, поделитесь.

4b9b3361

Ответ 1

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

В более общем смысле убедитесь, что вы установили, что диалог не является фиксированным. Это немного меня тоже.

Ответ 2

Вы можете захватить сигнал QApplication:: focusChanged (QWidget *, QWidget *) и изменить фон текущего сфокусированного виджета. Я думаю, это поможет определить, сколько места каждый виджет занимает.

Ответ 3

Похоже, мы могли бы использовать эквивалент режимов Firebug и CSS metrics. Самая сложная часть такого инструмента будет эффективно выяснять и сообщать, почему политика отдельных макетов использовала или не использовала заданное значение размера в виджетах.

Ответ 4

Трудно сказать, не видя ваш макет, но я вижу много проблем с изменением размера, которые вы описываете, из-за использования QGridLayout. Самая большая вещь в столбце или строке, будет определять минимальную ширину этого столбца. То же самое для строки.

Если вы используете QGridLayout, вы можете попробовать сделать span columns/rows.

Я также рекомендовал бы попробовать все ваши различные конфигурации компоновки в Designer и протестировать их, изменив размер. Мы фактически не используем конструктор, где я работаю, но я все время использую его для тестирования и отладки макетов.

Ответ 5

Много проб и ошибок. Я обнаружил, что вставка растяжек в стратегических местах часто помогает мне произвести эффект, который я хочу. Например, если у меня есть QPushButton в макете, который я хочу быть минимальным, я сделаю что-то вроде следующего:


QHBoxLayout* layout = new QHBoxLayout;
QPushButton* myBtn = new QPushButton("Test");

layout->insertStretch(1);
layout->addWidget(myBtn, 0);
layout->insertStretch(1);

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

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