Я пытаюсь выложить сетку квадратных пользовательских (подклассифицированных) QWidgets внутри QGridLayout и QScrollArea.Квадратные пользовательские QWidgets внутри QGridLayout внутри QScrollArea
Способ, которым я хочу работать, - это выбрать количество столбцов QGridLayout
и создать квадраты правильных размеров.
То, что я пытался делать уже
- укладки вручную из/изменение размера QWidgets, но это неаккуратно и медленно
- Установка
QScrollArea::widgetsResized
в истину, которая делает изменение ширины правильно, но не высота, см. screenshot.
Я попытался установить QSizePolicy
и первостепенную QWidget::heightForWidth
вместе с установкой QScrollArea::widgetsResized
в моем обычае QWidget-производного класса, например, так:
CustomWidget::CustomWidget(...)
{
...
QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred);
policy.setHeightForWidth(true);
setSizePolicy(policy);
}
...
int CustomWidget::heightForWidth(int width) const
{
return width; // square
}
Но CustomWidget::heightForWidth
никогда не вызывается.
Любая помощь будет оценена по достоинству.
EDIT: Я уже сделал то, что предложил this answer, мои пользовательские виджеты находятся в макете (QGridLayout).
возможно дубликат [QWidget :: heightForWidth() не вызывается] (http://stackoverflow.com/questions/17708449/qwidgetheightforwidth-is-not-called) –
ли вам попробуйте вызвать 'setFixedSize' для каждого виджета? –
@PavelStrakhov Я не хочу фиксированного размера, я хочу ту же самую высоту, что и каждая (переменная) ширина. Я попытался переопределить 'sizeHints()', но это не сработало для этого, так как мне нужно возвращать как ширину, так и высоту в этом методе. – blashyrk