在QScrollArea中动态创建和显示按钮数组

时间:2012-10-14 16:03:12

标签: qt user-interface

我的目标是在单击按钮时动态创建一个命令链接按钮数组,然后将它们全部显示在QscrollArea内的垂直布局中。我从数据库中获取按钮的数据。为此,我为按钮创建了一个插槽,并在插槽函数中编写了以下代码。

QCommandLinkButton *slotButtons[10];
for(int i=0; slotQuery.next(); i++)
{
    slotButtons[i] = new QCommandLinkButton;
    slotButtons[i]->setText(slotQuery.value(0).toString());
    slotButtons[i]->setDescription(slotQuery.value(1).toString());


    ui->scrollAreaSlots->layout()->addWidget(slotButtons[i]);
    ui->scrollAreaSlots->show();
    slotButtons[i]->show();


} 

这个编译没有错误,但即使在调用show之后按钮也不可见。 谁能告诉我哪里出错了?

更新:如果我删除所有“[i]”并注释循环;基本上只创建一个命令链接按钮,它完美地工作。但它不适用于循环。我的循环一切正常吗?

2 个答案:

答案 0 :(得分:1)

QScrollArea有一个子窗口小部件,可以包含其他窗口小部件。

当使用Qt Creator的UI设计器创建QScrollArea小部件时,Qt Creator会自动创建名为scrollAreaWidgetContents的小部件。然后将按钮添加到该窗口小部件的布局中,该布局不会自动创建。布局在以下代码中创建,该代码还添加了按钮:

QCommandLinkButton *slotButtons[10];
QVBoxLayout* layout = new QVBoxLayout(ui->scrollAreaWidgetContents);
for(int i=0; slotQuery.next(); i++)
{
    slotButtons[i] = new QCommandLinkButton;
    slotButtons[i]->setText(slotQuery.value(0).toString());
    slotButtons[i]->setDescription(slotQuery.value(1).toString());
    ui->scrollAreaWidgetContents->layout()->addWidget(slotButtons[i]);
} 

答案 1 :(得分:0)

尝试添加以下行(在将按钮添加到滚动区域之前)

slotButtons[i]->setVisible(true);

当您将按钮本身添加到scrool区域时,应确保按钮本身可见。