Как я могу настроить размер QDialog в соответствии с его длиной заголовка? - PullRequest
0 голосов
/ 26 сентября 2019

Сокращен заголовок одного из моих диалоговых окон (например, «Мой диалог ...»).Если бы диалог был немного шире, весь заголовок был бы полностью отображен, что выглядело бы лучше.

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

Есть лиобщий способ сделать это?Есть ли простой способ сделать это?Или это сверхинжиниринг?

1 Ответ

0 голосов
/ 26 сентября 2019

Не только эта цель сомнительна (см. vahanco комментарий), но ее трудно достичь, потому что строка заголовка окна вообще не является территорией Qt : кроме возможностиустановите его текст и управляйте, чтобы показать или скрыть кнопку закрытия / минимума / максимума с помощью флажков окна, там больше ничего не под контролем.

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

const QString text = "Very very very very very very very very very very very very very long window title";
setWindowTitle(text);

QFontMetrics metrics(font(), this);
setMinimumWidth( metrics.horizontalAdvance(text));

Это не будет работать из коробки, и весьма вероятно, что текст останется обрезанным, потому чтоИспользуемый шрифт предполагается, что будет таким же, как и в строке заголовка (обычно это не так), и мы не учитываем ширину кадра, ширину значка, ширину кнопок строки заголовка и все остальное.еще, который принадлежит оконному менеджеру и полностью неизвестен Qt.

Итак, вы можете выяснить , сколько дополнительного пространства требуется для всех этих вещей, и отрегулировать ширину с помощьюсовершенно произвольный дополнительный годdding, как

setMinimumWidth( metrics.horizontalAdvance(text) + 256);

и, возможно, получить то, что вы хотели в первую очередь (если вы все еще действительно хотите).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...