如何在Qt 中的网格布局中添加滚动条?
How to add a Scroll Bar to a Grid Layout in Qt?
我有一个 QGridLayout
,其中包含一堆小部件。当循环添加了太多小部件并且它们不能全部放在页面上时,问题就出现了。我想添加滚动条,但是显示不正确
此功能returns添加到主布局的选项卡,它包含网格布局:
QTabWidget *RegistersTab::createTab()
{
QTabWidget *tab = new QTabWidget(this);
std::vector<QGridLayout*> loVec; //to add to master layout
for(int i=0; i<2; i++) //number of pages
{
QWidget *client = new QWidget(this); //this part breaks it
QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setWidget(client);
QTabWidget *tabPage = new QTabWidget(client);
QGridLayout *loGrid = new QGridLayout(client);
tabPage->setLayout(loGrid);
QString title = QString("Page %1").arg(i);
tab->addTab(tabPage, title);
loVec.push_back(loGrid);
}
m_loGridVec.push_back(loVec);
return tab;
}
GridLayout
向量在那里,所以我可以添加小部件并稍后对其进行操作。目前,我的选项卡顶部只有一个灰色框 - 所以有些东西坏了。如果我删除滚动区域并将 (client)
设置为 (this)
。
我想需要进行简单的更正?
编辑(选项卡的制作方式):
ui->lo->addWidget(m_tab);
m_tab->addTab(createTab(), title); // m_tabCbc is a QTabWidget;
我认为您需要一个简单的 QWidget(例如 'client'),将其布局设置为您的 GridLayout(以便在小部件中具有 gridLayout "bundled")。然后将该 Widget 放入滚动区域(这将添加所需的滚动条行为),然后将其添加到您想要的主 Widget return.
编辑:我认为在某些情况下您以错误的方式使用了育儿机制,即
QWidget *client = new QWidget(this); //creates a new widget which has "this" as its parent, meaning it will be deleted if "this" is destroyed
QGridLayout *loGrid = new QGridLayout(client); //a layout with client as its parent
QGridLayout *loGrid2 = new QGridLayout();
loGrid2->addWidget(xyz)
client->setLayout(loGrid2); //I think this is what you want
您没有在任何地方添加滚动区域。它会在 QTabWidget(this)里面。
如您所述,您需要嵌套标签。因此,您需要为 tabPage
小部件添加一个页面,并在其布局中添加滚动区域。
应该是这样的:
tabPage
=> pageWidget(QWidget)
=> layout
=> scrollArea
=> scrollAreaWidget(client?)
=> layout(loGrid)
QWidget *client = new QWidget;
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(client);
QGridLayout *loGrid = new QGridLayout;
client->setLayout(loGrid);
QTabWidget *tabPage = new QTabWidget;
QWidget *pageWidget = new QWidget;
pageWidget->setLayout(new QVBoxLayout);
pageWidget->layout()->addWidget(scrollArea);
tabPage->addTab(pageWidget, "Page");
QString title = QString("Page %1").arg(i);
tab->addTab(tabPage, title);
我有一个 QGridLayout
,其中包含一堆小部件。当循环添加了太多小部件并且它们不能全部放在页面上时,问题就出现了。我想添加滚动条,但是显示不正确
此功能returns添加到主布局的选项卡,它包含网格布局:
QTabWidget *RegistersTab::createTab()
{
QTabWidget *tab = new QTabWidget(this);
std::vector<QGridLayout*> loVec; //to add to master layout
for(int i=0; i<2; i++) //number of pages
{
QWidget *client = new QWidget(this); //this part breaks it
QScrollArea *scrollArea = new QScrollArea(this);
scrollArea->setWidget(client);
QTabWidget *tabPage = new QTabWidget(client);
QGridLayout *loGrid = new QGridLayout(client);
tabPage->setLayout(loGrid);
QString title = QString("Page %1").arg(i);
tab->addTab(tabPage, title);
loVec.push_back(loGrid);
}
m_loGridVec.push_back(loVec);
return tab;
}
GridLayout
向量在那里,所以我可以添加小部件并稍后对其进行操作。目前,我的选项卡顶部只有一个灰色框 - 所以有些东西坏了。如果我删除滚动区域并将 (client)
设置为 (this)
。
我想需要进行简单的更正?
编辑(选项卡的制作方式):
ui->lo->addWidget(m_tab);
m_tab->addTab(createTab(), title); // m_tabCbc is a QTabWidget;
我认为您需要一个简单的 QWidget(例如 'client'),将其布局设置为您的 GridLayout(以便在小部件中具有 gridLayout "bundled")。然后将该 Widget 放入滚动区域(这将添加所需的滚动条行为),然后将其添加到您想要的主 Widget return.
编辑:我认为在某些情况下您以错误的方式使用了育儿机制,即
QWidget *client = new QWidget(this); //creates a new widget which has "this" as its parent, meaning it will be deleted if "this" is destroyed
QGridLayout *loGrid = new QGridLayout(client); //a layout with client as its parent
QGridLayout *loGrid2 = new QGridLayout();
loGrid2->addWidget(xyz)
client->setLayout(loGrid2); //I think this is what you want
您没有在任何地方添加滚动区域。它会在 QTabWidget(this)里面。
如您所述,您需要嵌套标签。因此,您需要为 tabPage
小部件添加一个页面,并在其布局中添加滚动区域。
应该是这样的:
tabPage
=> pageWidget(QWidget)
=> layout
=> scrollArea
=> scrollAreaWidget(client?)
=> layout(loGrid)
QWidget *client = new QWidget;
QScrollArea *scrollArea = new QScrollArea;
scrollArea->setWidgetResizable(true);
scrollArea->setWidget(client);
QGridLayout *loGrid = new QGridLayout;
client->setLayout(loGrid);
QTabWidget *tabPage = new QTabWidget;
QWidget *pageWidget = new QWidget;
pageWidget->setLayout(new QVBoxLayout);
pageWidget->layout()->addWidget(scrollArea);
tabPage->addTab(pageWidget, "Page");
QString title = QString("Page %1").arg(i);
tab->addTab(tabPage, title);