QGridLayout布局在QScrollArea中的布局问题。。


本帖源地址


原来的问题 如图:

因为本人的这个做法是 QGridLayout -》QWidget-》QScrollArea-》QFrame 这样的一个层次关系

在初始化时,在QGridLayout中添加了N多Button,有些Button是 需要条件才能显示的。。

这样的话,QScrollArea 的固定初始化的大小。。

当隐藏的Button再次显示时,就会出现了QGridLayout的大小固定了。。Button就出现了高度压缩。。如上图。。

当固定了Button的高度时,有出现了如下图的问题!!


其实都是同一个原因造成的。。。

真实的原因就是没有 设置QScorllArea可以随着QWidget的变化而变化造成。。

QScorllAreaScroll->setWidgetResizable(true);  //都是这一句给害的,找了好久的错误。。

特写此帖。。以警告世人。。。。



在Qt,可以使用QGridLayout来实现栅格布局。要在栅格布局固定行数并产生滚动条,可以将QGridLayout放置在QScrollArea。具体实现步骤如下: 1. 创建一个QScrollArea对象,并将QGridLayout对象设置为其子部件(即放置在QScrollArea)。 2. 将QScrollArea对象设置为主窗口或者其他容器窗口的子部件。 3. 设置QGridLayout的行数和列数,以及单元格的大小和间距。 4. 向QGridLayout添加需要布局的控件。 5. 当控件的数量超出了行数和列数时,QScrollArea会自动产生滚动条。 下面是一个示例代码: ```cpp QScrollArea *scrollArea = new QScrollArea(this); QWidget *scrollWidget = new QWidget(scrollArea); QGridLayout *gridLayout = new QGridLayout(scrollWidget); scrollWidget->setLayout(gridLayout); scrollArea->setWidget(scrollWidget); scrollArea->setWidgetResizable(true); //设置滚动条自动显示 gridLayout->setRowStretch(0, 1); // 设置第一行自动拉伸 gridLayout->setColumnStretch(0, 1); // 设置第一列自动拉伸 gridLayout->setSpacing(10); // 设置单元格之间的间距 gridLayout->setContentsMargins(10, 10, 10, 10); // 设置边距 for (int i = 0; i < 100; ++i) { QLabel *label = new QLabel(QString("Label %1").arg(i)); gridLayout->addWidget(label, i / 10, i % 10); // 添加控件 } ``` 这个例子,我们将QGridLayout放置在一个QWidget对象,然后将QWidget对象放置在QScrollArea。然后,我们设置QGridLayout的行数和列数,以及单元格的大小和间距,并向其添加了100个QLabel控件。当控件的数量超出了10行10列时,QScrollArea会自动产生滚动条。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值