我正在尝试在QGridLayout和QScrollArea中布置一个方形自定义(子类)QWidgets的网格。
我希望它的工作方式是选择QGridLayout
列的数量并创建正确尺寸的正方形。
我已经尝试过的是
QScrollArea::widgetsResized
设置为true可正确调整宽度,但不能调整高度,请参阅screenshot。我已尝试设置QSizePolicy
并覆盖QWidget::heightForWidth
以及在我的自定义QWidget派生类中设置QScrollArea::widgetsResized
,如下所示:
CustomWidget::CustomWidget(...)
{
...
QSizePolicy policy(QSizePolicy::Preferred, QSizePolicy::Preferred);
policy.setHeightForWidth(true);
setSizePolicy(policy);
}
...
int CustomWidget::heightForWidth(int width) const
{
return width; // square
}
但永远不会调用CustomWidget::heightForWidth
。
任何帮助都将不胜感激。
编辑:我已经完成了this answer建议的内容,我的自定义小部件位于布局中(QGridLayout)。
答案 0 :(得分:3)
您似乎缺少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();