我的目标是在单击按钮时动态创建一个命令链接按钮数组,然后将它们全部显示在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]”并注释循环;基本上只创建一个命令链接按钮,它完美地工作。但它不适用于循环。我的循环一切正常吗?
答案 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区域时,应确保按钮本身可见。