gpt4 book ai didi

c++ - QScrollArea 内的 QGridLayout 内的方形自定义 QWidgets

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:47 25 4
gpt4 key购买 nike

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

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

我已经尝试过的是

  1. 手动布局/调整 QWidgets 的大小,但这很草率而且很慢
  2. QScrollArea::widgetsResized 设置为 true,这会正确调整宽度,但不会正确调整高度,请参阅 screenshot .

我已经尝试在自定义 QWidget 派生类中设置 QSizePolicy 并覆盖 QWidget::heightForWidth 以及设置 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) 中。

最佳答案

您似乎缺少 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();

关于c++ - QScrollArea 内的 QGridLayout 内的方形自定义 QWidgets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30672183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com