我创建动态未知数量的按钮并将它们放到QScrollArea。
cols = Regex.Replace(cols, @"\((?>[^()]|(?<c>)\(|(?<-c>)\))*(?(c)(?!))\)", m => m.Value.Replace(",", ";"));
someDialogButton = new QPushButton();
usersDialogs.push_back(someDialogButton);
ui->usersArea->setWidget(someDialogButton);
是usersDialogs
QVector<QPushButton*>
是usersArea
但按钮重叠,只能看到添加的最后一个按钮。我尝试使用:QScrollArea
方法,但它没用。
如何构建按钮以使所有按钮可见?
答案 0 :(得分:2)
void QScrollArea::setWidget(QWidget * widget)
设置滚动区域的小部件。
小部件成为滚动区域的子级,并将被销毁 删除滚动区域或设置新窗口小部件时。
因此,每当您致电QScrollArea::setWidget()
时,您都会覆盖之前的小部件。您需要做的是使用按钮填充QWidget
,然后在该容器小部件上调用QScrollArea::setWidget()
。
以下是您的类构造函数的示例:
MainWindow::MainWindow(QWidget *parent)
: QWidget(parent)
{
this->resize( 300, 200 );
auto * layout = new QVBoxLayout(this);
auto * scrollArea = new QScrollArea(this);
scrollArea->setWidgetResizable( true );
layout->addWidget( scrollArea );
auto * container = new QWidget();
scrollArea->setWidget( container );
layout = new QVBoxLayout(container);
auto * button1 = new QPushButton( "1", container);
auto * button2 = new QPushButton( "2", container);
auto * button3 = new QPushButton( "3", container);
layout->addWidget( button1 );
layout->addWidget( button2 );
layout->addWidget( button3 );
}
对我来说,它给出了这个: