Я пытаюсь выложить сетку квадратных пользовательских (подклассных) QWidgets внутри QGridLayout и QScrollArea.
То, как я хочу, чтобы это работало, это выбор количества QGridLayout
столбцы и создание квадратов правильных размеров.
То, что я уже пытался сделать, это
QScrollArea::widgetsResized
в true, который правильно изменяет ширину, но не высоту, см. Скриншот.Я пытался установить 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
никогда не называется.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ: я уже сделал то, что этот ответ Предполагается, что мои пользовательские виджеты находятся в макете (QGridLayout).
Кажется, ты пропал hasHeightForWidth
реализация. Следующий фрагмент отлично работает:
class MyWidget : public QTextEdit {
public:
MyWidget() {}
int heightForWidth(int width) const {
return width;
}
bool hasHeightForWidth() const {
return true;
}
};
//...
QScrollArea area;
QWidget* widget = new QWidget();
QGridLayout* layout = new QGridLayout(widget);
area.setWidget(widget);
area.setWidgetResizable(true);
for(int row = 0; row < 10; row++) {
for(int column = 0; column < 4; column++) {
layout->addWidget(new MyWidget(), row, column);
}
}
area.show();