Вопрос

Для тех из вас, кто не читал мои квесты по Qt: я изучаю Qt для проекта.У меня вообще ограниченный опыт проектирования графического интерфейса, а не Qt.

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

Я хочу, чтобы менеджер по расположению мог определить лучший способ изменения размера этих кнопок, но я также хочу, чтобы их исходные пропорции оставались неизменными.Например, если я начну с кнопок 32X32, которые необходимо сжать, чтобы они поместились в макете, я хочу, чтобы они сжимались пропорционально, чтобы сохранить масштаб ширины и высоты.20X20, 16X16, 12X12 — все бы ничего, но 24X16 — это пример неприемлемых размеров.

Я поработал с правилами размера кнопок и опциями растягивания.Я не вижу, даже после прочтения классов QPushButton и QHboxLayout, как это сделать.Как это достигается?

Спасибо.

Это было полезно?

Решение

Если я правильно понимаю вопрос, я думаю, что вы хотите QBoxLayout::addStretch().Это добавит объект-разделитель, который заполнит неиспользуемое пространство.Таким образом, кнопки будут иметь идеальный размер, а проставка заполнит все остальное.Вы можете попробовать поэкспериментировать с этим в Designer, это проще, чем цикл записи/компиляции/выполнения.

Другие советы

Вам стоит посмотреть ответы на этот вопрос.Это резюме моего ответа.

Вам необходимо создать собственную производную от QLayoutItem, которая переопределяет bool hasHeightForWidth() и int heightForWidth( int width ) чтобы сохранить соотношение сторон.Вы можете либо передать кнопку и запросить ее, либо просто установить соотношение напрямую.Вам также необходимо убедиться, что функция widget() возвращает указатель на нужную кнопку.

Как только это будет сделано, вы сможете добавить элемент макета в макет так же, как и виджет.Поэтому, когда ваша кнопка будет добавлена, измените ее, чтобы использовать свой собственный класс элемента макета.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top