在Qt学习曲线上,我已经看到很多关于动态布局的问题,但解决方案对我不起作用,或者我不太了解它们。
参考问题:: Qt Scroll Area does not add in scroll bars,How can i make widgets overflow to make a scrollbar appear in Qt?
问题:: 我希望在QScrollArea
内拥有一组小部件的动态布局。我已经能够在Qt Creator中手动执行此操作,现在我正在尝试通过代码执行此操作。
如何阻止小部件拉伸/强制该区域滚动?
如何从顶部开始添加小部件?我的QVBoxLayout
中有一个垂直间隔符,但它将所有内容都推到了底部。
简单测试代码::
void MainWindow::on_pushButton_clicked()
{
ui->myScroll->setWidgetResizable(true); //making sure this is set
QPushButton *b = new QPushButton(this);
b->setText(QString("Hello Button"));
QHBoxLayout *h = new QHBoxLayout();
h->addWidget(b,0);
ui->myVBoxLayout->addLayout(h,0);
}
结果::左侧压扁(动态) - 右侧确定(手动设置)
Qt Creator Setup ::左侧:动态 - 右侧手动设置
属性::
答案 0 :(得分:1)
您可以在按钮上设置使用setMinimumHeight()
以防止压扁按钮。可以使用setContentsMargin()
为项目边框和项目内容之间的空间配置布局(QtDesigner将所有四个方向设置为9 IIRC)和setSpacing()
项目之间的空间(QtDesigner使用默认值6) 。此外,setWidgetResizable(true)
允许您的scrollarea重新调整区域内的视图小部件(这是放置布局和子项的位置)。
这对我有用:
在构造函数或代码集中scrollArea-> widget()来保存QVBoxLayout:
v = new QVBoxLayout;
ui->scrollArea->widget()->setLayout(v);
在按钮插槽中:
void MainWindow::pushButtonPressed()
{
ui->scrollArea->setWidgetResizable(true);
QPushButton *b = new QPushButton(this);
b->setText(QString("Hello Button"));
QHBoxLayout *h = new QHBoxLayout();
h->addWidget(b,0);
v->addLayout(h);
}