以编程方式创建带有 UI 的选项卡

Posted

技术标签:

【中文标题】以编程方式创建带有 UI 的选项卡【英文标题】:Create tab with UI programmatically 【发布时间】:2012-12-16 14:28:04 【问题描述】:

这是我的用户界面:

这是以编程方式创建的选项卡:

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

我希望新创建的选项卡具有与“聊天室”选项卡完全相同的布局。关于如何做到这一点的任何建议都会很棒。

【问题讨论】:

首先您需要在主窗口中创建一个QTabWidget X.Jacobs:检查更新的帖子。 您需要以编程方式复制新选项卡中的布局。无论您做什么来创建第一个选项卡,都要做同样的事情。 我不确定布局是如何以编程方式创建的,因为我是使用 QT 设计器制作的。 【参考方案1】:

最简单的方法(在 Designer 中)是创建一个名为 ChatTab 之类的新 UI 表单类,并将其基于 QWidget

将聊天室小部件和布局从 MainWindow UI 表单移动(即剪切和粘贴)到 ChatTab 表单,但将 QTabWidget 容器保留在 MainWindow 表单中。如果您希望聊天室在首次打开时显示在您的主窗口中,请在 Designer 内部将其第一个 QWidget 提升为 ChatTab

任何额外的标签都应该像这样以编程方式添加:

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

如果你想让你的生活更轻松,可以在 ChatTab 构造函数中添加一些花哨的东西。

【讨论】:

与 QTabWidget 方法相比,此方法的另一个优点是 ChatTab 小部件可以在任何类型的窗口中重复使用 - QDockWidget、QDialog、QMainWindow 等。要做的就是把它放在一个包装器里。【参考方案2】:

你应该为这个布局创建一个自定义的 QTabWidget,命名为 ChatWidget,并像这样创建一个工厂 API:

ChatWidget * ChatWidget::creater(TabWidget * tw, ChatData * cd) 
    ChatWidget * cw = ChatWidget.create();
    tw.addTab(cast<QWidget>cw, 0);
    // some init
    ...
    return cw;

好久没用Qt和C++了,希望能给你一点提示。

【讨论】:

【参考方案3】:

使用您当前的 chatRoom 类作为 基类 并在其中做一些布局;

下次您想创建新的标签时,只需执行以下操作:

ui->tabWidget->addTab(new chatRoom(), "Tab 3");

希望能提供帮助。

【讨论】:

以上是关于以编程方式创建带有 UI 的选项卡的主要内容,如果未能解决你的问题,请参考以下文章

React.js Material-UI:以编程方式从子组件中隐藏父组件选项卡

以编程方式反应导航更改选项卡顺序

Vb.net 如何以编程方式选择选项卡控件中的最后一个选项卡

当以编程方式将选项卡更改为“更多”中的选项卡时,TabbedPage selectedItem 不会更改

以编程方式更改 TabViewController 中的选定选项卡

如何在 iOS 上以编程方式创建选项卡视图