【发布时间】:2014-03-26 23:33:06
【问题描述】:
我是 Qt 新手,我想实现一个可以动态增长的可滚动小部件,例如通过在按下另一个按钮时向其中添加按钮。我尝试使用以下布局和代码来实现它:
scrollArea = new QScrollArea(ui->outerWidget);
scrollArea->setWidget(ui->innerWidget);
layout = new QVBoxLayout(ui->outerWidget);
ui->innerWidget->setLayout(layout);
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// code for PushButton to add buttons in innerWidget
void MainWindow::on_pushButton_clicked()
{
QPushButton *button = new QPushButton("button"+QString::number( nameCounter ));
nameCounter ++;
ui->innerWidget->layout()->addWidget(button);
}
这个实现在我运行程序时有两个问题,首先是 innerWidget 出现不合适的位置(我在 Qt Creator 的设计模式中定义了它的位置),其次在布局中添加了许多小部件后,滚动条没有增长,但小部件会变小以适应布局:
在another thread 中建议将 widgetResizable 设置为 true:
scrollArea->setWidgetResizable(true);
滚动条现在似乎可以工作了,但新问题是 innerWidget 变得非常小,因此几乎看不到:
那么,我怎样才能实现一个尊重设计大小和位置的可滚动小部件?
【问题讨论】: