Mam niestandardowy widget, który ma ogólny układ QVBoxLayout. Zawiera kilka etykiet, QFormLayout, przycisk i odcinek do zjedzenia całej przestrzeni. Jedna z etykiet może być dość duża, więc staram się upewnić, że nie ma żadnych dziwnych przypadków, w których tekst jest nieczytelny. Widżet jest zawarty w QScrollArea, aby zapewnić, że jeśli użytkownik zmniejszy całe okno, wszystkie aspekty widżetu będą nadal widoczne.QLabel odcinanie tekstu przy zmianie rozmiaru
Wygląda na to, że wielkość etykiety QLabel jest dobra, ale po osiągnięciu pewnego poziomu ciasnoty po prostu odcina kilka ostatnich wierszy etykiety i przydziela przestrzeń do odcinka u dołu widgetu.
Robię to wszystko w kodzie bez projektanta, więc jest całkowicie możliwe, że po prostu czegoś brakuje. Te elementy składowe są do ogólnej QVBoxLayout w następującej kolejności:
OverallLayout = new QVBoxLayout(this);
Title = new QLabel();
Description = new QLabel();
SubRegion = new QFormLayout();
Button = new QButton();
...
// set text values, wordWrap(true), and Font for labels
OverallLayout->addWidget(Title);
OverallLayout->addWidget(Description);
OverallLayout->addLayout(SubRegion);
OverallLayout->addStrut(MIN_DIST);
OverallLayout->addWidget(Button);
OverallLayout->addStretch(STRETCH_FACTOR);
Wyniki badania: Badanie wyników zwróconych z funkcji QLabel w sizeHint() zwrócone wartości nie wydają się zmieniać wraz widget kurczy w poziomie. Jednak QLabel rozszerza się, aby zająć bardziej pionowy pokój (153 vs wskazówka 103), po prostu nie wystarczy, aby zmieścić cały tekst. Kiedy QLabel jest po raz pierwszy pokazany, ma mniej pikseli niż jego rozmiarHint, ale wciąż wystarcza do wysokości heightForWidth. Gdy jest zmieniany, ma 30 mniej niż jego wysokość, ale więcej niż jego rozmiarHint.
Sprawdziłem i duża wartość QLabel ma wartości hasHeightForWidth() i wordWrap() ustawione na true. Co ja robię źle?
Czy możesz dodać fragment kodu, do którego te widgety są dodawane do układu? Myślę, że powinieneś ustawić minimalny rozmiar QLabel przez setMinimumHeight(), tak aby nie było odcięcia. Alternatywnie możesz ustawić maksymalną wysokość elementu dystansowego. –
Jednym ze sposobów rozwiązania problemu jest powiązanie z metodą zmiany rozmiaru i ustawienie minimalnej wysokości na wartość heightForWidth (width) dla etykiety Description. Wydaje się to trochę kludgey, więc zastanawiałem się, jaki byłby właściwy sposób, aby menedżer układu wykonał swoją pracę. – ElCraneo
Ale co z sugestią użycia 'setMinimumHeight()'? – jdi