我有一个QGridLayout,其中将包含一堆小部件。当循环中添加了太多的小部件并且它们无法全部容纳在页面上时,便出现了问题。我想添加滚动条,但显示不正确。

此函数返回一个选项卡,该选项卡添加到主布局中,其中包含网格布局:

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 vector ,因此我可以添加小部件并在以后进行操作。目前,我的标签上方只有一个灰色框-某些东西坏了。如果我删除滚动区域并将(client)设置为(this)

我猜要进行一个简单的更正吗?

编辑(如何制作标签):
ui->lo->addWidget(m_tab);

m_tab->addTab(createTab(), title); // m_tabCbc is a QTabWidget;

最佳答案

您不会在任何地方添加滚动区域。它将在QTabWidget内部(此)。

如前所述,您需要嵌套选项卡。因此,您需要为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);

关于c++ - 如何在Qt中将滚动条添加到网格布局?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27838662/

10-12 21:30