2

我正在尝试在 QGridLayout 和 QScrollArea 内布置方形自定义(子类)QWidget 网格。

我希望它工作的方式是选择QGridLayout列数并创建正确大小的正方形。

我已经尝试过的是

  1. 手动布局/调整 QWidgets 的大小,但这很草率而且很慢
  2. 设置QScrollArea::widgetsResized为 true 可以正确调整宽度,但不能正确调整高度,请参见屏幕截图

我已经尝试在我的自定义 QWidget 派生类中设置和覆盖,如下所示QSizePolicyQWidget::heightForWidthQScrollArea::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永远不会被调用。

任何帮助,将不胜感激。

编辑:我已经按照这个答案的建议做了,我的自定义小部件在布局中(QGridLayout)。

4

1 回答 1

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();
于 2015-06-05T18:16:53.650 回答