如何在 Qt 中动态添加选项卡?

Posted

技术标签:

【中文标题】如何在 Qt 中动态添加选项卡?【英文标题】:How to add tabs dynamically in a Qt? 【发布时间】:2014-08-04 20:49:46 【问题描述】:

我想根据用户输入在 Qt 应用程序中动态添加选项卡。

    默认情况下,一个选项卡会一直存在。为方便起见,如果我可以在图形编辑器中创建此选项卡的布局和功能,那就太好了。然后我想将此布局转换为代码,放入类构造函数并添加如下选项卡:

    ui->tabWidget->addTab(new myTabClass(), "Tab 2");

    我也想以编程方式推广此标签。这可能吗?

【问题讨论】:

听起来你想在 QT Designer 中设计一个自定义 QWidget,它将分配给每个选项卡(即 - myTabClass 是你的自定义 QWidget) 也许吧。在我的选项卡中,我想包含自定义小部件 QCustomPlot。这个是通过将 QWidget 提升为 QCustomPlot 来使用的。它在 GUI 编辑器中工作,但我真的不知道如何在代码中做到这一点。 【参考方案1】:

要动态添加选项卡并由类构建,您可以使用额外的 .ui 文件。这样您就可以使用 Qt Designer GUI 完成所有布局。

1) 在 mainwindow.ui 中创建一个空的选项卡小部件。 (例如,命名为 myTabWidget)

2) 将一个新的“Qt Design Form Class”添加到您的项目目录中,作为 QWidget 类,而不是 QTabWidget(例如,命名为 MyTabPage):

右键项目->新增->Qt->Qt设计表单类

3) 在 mytabpage.ui 中,您可以根据需要将设计插入 myTabWidget。

4) 下一步您可以在 MainWindow 构造函数或其他地方实例化 MyTabPage 并将其添加到 myTabWidget。之前可以删除 myTabWidget 中的空选项卡。要从 myNewTab 访问参数,您需要在 MyTabPage 中声明一个函数。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);
    MyTabPage *myNewTab = new MyTabPage;
    ui-> myTabWidget ->removeTab(0);
    ui-> myTabWidget ->addTab(myNewTab, tr("name"))
    myNewTab->functionDeclaredInMyTabPage (); //access parameters of myNewTab

PS:我知道这个问题很老了。但我想为别人提供一步一步的解决方案,因为我最近不得不为自己努力。

【讨论】:

这是一个很好的答案。但它确实将新标签设置在旧标签所在的位置。我的意思是添加了标签,但不知何故它们被埋在了新标签下!! 感谢这个答案,我需要知道如何与设计师一起做。这是我需要的解决方案! @McLan 因为 ui-> myTabWidget ->removeTab(0);删除上一个选项卡.... 太棒了 - 谢谢...小修正:; 在你 addTab() 行的末尾丢失【参考方案2】:

您可以通过int QTabWidget::insertTab ( int index, QWidget * page, const QIcon & icon, const QString & label ) 插入标签,它将具有给定标签、页面和图标的标签插入到指定索引的标签小部件中:

ui->tabWidget->insertTab(1,new myTabClass(),QIcon(QString(":/SomeIcon.ico")),"TabText");

删除标签也是由QTabWidget::removeTab ( int index ) 完成的。

【讨论】:

以上是关于如何在 Qt 中动态添加选项卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 p:tabView 组件中动态添加和删除选项卡

如何将选项卡“ALL”动态添加到菜单选项卡

R Shiny:如何将数据表添加到动态创建的选项卡

在 BootStrap 选项卡中添加动态选项卡

QT。向 QLayout 添加新布局

QML TabView动态添加tab和赋初值