如何在QScrollArea中撰写按钮?

时间:2016-01-05 19:46:53

标签: c++ qt user-interface qt-creator

我创建动态未知数量的按钮并将它们放到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方法,但它没用。

如何构建按钮以使所有按钮可见?

1 个答案:

答案 0 :(得分:2)

Qt documentation

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

对我来说,它给出了这个:

Window shown by the application