Я сталкиваюсь со странным сценарием, когда я не понимаю вывод AdjustSize(). Я вызываю AdjustSize() для QLabel, и полученный размер не соответствует минимальномуSizeHint или sizeHint — он находится между ними. Единственный другой фактор, который я могу вообразить, — это длина текста внутри QLabel, но я получаю один и тот же результат для разной длины, так что это тоже не кажется правильным.
Вот точный сценарий:
У меня есть горизонтальный макет, содержащий два QLabels.
Одна QLabel содержит текст и имеет фиксированную ширину fw и минимальную высоту mh. Если весь текст умещается в пределах этого размера, размеры должны быть точно равными fw x mh. Если текста больше, высота должна увеличиться.
Второй QLabel содержит растровое изображение и всегда должен поддерживать соотношение сторон. Минимальная ширина и минимальная высота точно соответствуют исходным размерам растрового изображения. Если высота текстовой QLabel увеличивается, эта вторая QLabel должна увеличиваться как по ширине, так и по высоте, чтобы соответствовать новой высоте текстовой QLabel, сохраняя при этом соотношение сторон растрового изображения.
Кажется, это должно быть легко выполнимо. После того, как текст первого QLabel изменен (динамически на любую произвольную длину (в пределах разумного, не выходя за пределы экрана или что-то еще)), я вызываю AdjustSize() для этого первого QLabel. Затем, основываясь на полученной высоте, я рассчитываю коэффициент масштабирования, на который растровое изображение должно увеличиться, чтобы соответствовать этой высоте, и сбрасываю растровое изображение с масштабированной высотой и масштабированной шириной.
Проблема в том, что высота текстовой QLabel не ведет себя каким-либо разумным образом, который я могу различить. Даже при значительно меньшем размере текста, чем то, что может поместиться в начальный размер, AdjustSize() все равно приводит к увеличению высоты выше этого начального минимума. Здесь я собираюсь использовать некоторые точные цифры, чтобы проиллюстрировать проблему. Минимальная высота — 385. В sizeHint указано 401, а в AdjustSize — 390. Почему sizeHint 401, если текст может легко уместиться в минимуме 385? И почему при настройке AdjustSize() выбрано значение 390, которое не соответствует ни одному из значений?
adjustSize
иsetGeometry
не работают, когда геометрия виджета управляется компоновкой. Вместо этого вам нужно попытаться использовать макет, чтобы управлять своей этикеткой так, как вы хотите. Возможно, этот ответ и тот, на который он ссылается, могут иметь отношение к вашей ситуации. - person Kuba hasn't forgotten Monica   schedule 17.02.2017#include <QtWidgets>
. Для объектов в макетеadjustSize()
не должен ничего делать IIRC. Я не могу воспроизвести ничего из этого. - person Kuba hasn't forgotten Monica   schedule 19.02.2017