防止在QVBoxLayout中拉伸小部件并在QScrollArea中显示滚动条?

时间:2013-08-14 04:07:16

标签: qt

在Qt学习曲线上,我已经看到很多关于动态布局的问题,但解决方案对我不起作用,或者我不太了解它们。

参考问题:: Qt Scroll Area does not add in scroll barsHow 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);

}

结果::左侧压扁(动态) - 右侧确定(手动设置)

enter image description here


Qt Creator Setup ::左侧:动态 - 右侧手动设置

enter image description here

属性::

enter image description here

1 个答案:

答案 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);
}