如何在 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 中动态添加选项卡?的主要内容,如果未能解决你的问题,请参考以下文章