0

我的目标是在单击按钮时动态创建一组命令链接按钮,然后将它们全部显示在 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]”并评论循环;基本上只创建一个命令链接按钮,它工作得很好。但它不适用于循环。我的循环一切正常吗?

4

2 回答 2

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]);
} 
于 2012-10-14T17:54:42.537 回答
0

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

slotButtons[i]->setVisible(true);

这应该确保按钮本身在您将其添加到 scrool 区域时可见。

于 2012-10-14T16:47:41.733 回答