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

4

根据用户输入,我希望能够在Qt应用程序中动态添加选项卡。

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

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

  2. 我还想以编程方式推广这个选项卡。这可行吗?


听起来你想在QT Designer中设计一个自定义QWidget,它将被分配给每个选项卡(即- myTabClass是您的自定义QWidget)。 - tinkertime
也许吧。在我的选项卡中,我想包含自定义小部件QCustomPlot。这可以通过将QWidget提升为QCustomPlot来实现。它在GUI编辑器中运行良好,但我真的不知道如何在代码中实现。 - user3050215
2个回答

6

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

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

2)向项目目录中添加一个新的“Qt 设计表单类”,作为 QWidget 类添加,而不是 QTabWidget(例如命名为 MyTabPage):

右键单击项目 -> 添加新项 -> Qt -> Qt Design Form Class

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
谢谢您的回答,我需要知道如何使用设计器完成它。这就是我需要的解决方案! - Esocoder
@McLan 因为 ui->myTabWidget->removeTab(0); 会移除前一个选项卡.... - Mecanik
太棒了 - 谢谢...小修正:addTab() 行末缺少 ; - BlueChip

1
你可以通过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 ) 实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接