C++ QGridLayout内的方形定制QWidgets内的QScrollara
我试图在QGridLayout和QScrollArea中布置一个正方形定制(子类)QWidgets网格 我希望它的工作方式是选择C++ QGridLayout内的方形定制QWidgets内的QScrollara,c++,qt,qwidget,qscrollarea,qgridlayout,C++,Qt,Qwidget,Qscrollarea,Qgridlayout,我试图在QGridLayout和QScrollArea中布置一个正方形定制(子类)QWidgets网格 我希望它的工作方式是选择QGridLayout列的数量并创建正确大小的正方形 我已经试着做的是 手动布局/调整QWidgets的大小,但这是草率和缓慢的 将qscrollara::widgetsResized设置为true,这样可以正确调整宽度大小,但不能调整高度,请参见 我已尝试在自定义QWidget派生类中设置QSizePolicy和重写QWidget::heightForWidth以及设
QGridLayout
列的数量并创建正确大小的正方形
我已经试着做的是
qscrollara::widgetsResized
设置为true,这样可以正确调整宽度大小,但不能调整高度,请参见QSizePolicy
和重写QWidget::heightForWidth
以及设置qScrolArea::widgetsResized
,如下所示:
CustomWidget::CustomWidget(…)
{
...
QSizePolicy策略(QSizePolicy::首选,QSizePolicy::首选);
policy.setHeightForWidth(true);
制定政策(政策);
}
...
int CustomWidget::heightForWidth(int width)常量
{
返回宽度;//平方
}
但是从未调用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();
类MyWidget:公共QTextEdit{
公众:
MyWidget(){}
整数高度宽度(整数宽度)常数{
返回宽度;
}
bool hasHeightForWidth()常量{
返回true;
}
};
//...
克斯克罗拉区;
QWidget*widget=新的QWidget();
QGridLayout*layout=新的QGridLayout(小部件);
setWidget(widget);
area.SetWidgetResizeable(真);
对于(int行=0;行<10;行++){
for(int列=0;列<4;列++){
布局->添加小部件(新建MyWidget(),行,列);
}
}
area.show();
可能重复您是否尝试在每个小部件上调用setFixedSize
?@PavelStrakhov我不想要固定大小,我想要与每个(可变)宽度相同的高度。我试图重写sizeHints()
,但由于我需要在该方法中同时返回宽度和高度,因此该方法不起作用。@m.s.由于我正在按照公认的答案进行操作,因此它不是重复的。我的自定义QWidgets已经在布局中。此外,您可能希望在下次将某个内容标记为重复内容时实际阅读该问题。谢谢