以编程方式创建带有 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 不会更改