【问题标题】:dynamically adding a tab qt 5.1动态添加选项卡 qt 5.1
【发布时间】:2014-01-21 13:08:41
【问题描述】:

我很难弄清楚我应该如何做到这一点。我有一个QWidget 主窗口,它在VBoxLayout 内有一个QTabWidget。该窗口的主要功能是保存与我们软件聊天的人的聊天记录。

所以我需要的是能够在人们打开新聊天时动态添加标签。例如,如果我正在与人 A 聊天并且我从我的聊天列表中单击人 B,那么如果窗口已打开,则将另一个选项卡添加到窗口中的 QTabWidget,如果未打开,则只需创建一个新窗口。

现在每个选项卡中的布局都相当复杂,因为我有笑脸和许多其他各种各样的事情要处理,所以我宁愿不把所有这些都写在代码中。

有没有一种方法可以将QTab 子类化并为每个选项卡重用该类?第二个问题:我来自编程方面的android背景,所以我习惯于能够为选项卡子类的每个实例(在这种情况下)拥有可重用的XML布局,无论如何我可以做类似的事情QML 每个子类?

如果我以完全错误的方式解决此问题,我将非常感谢您的帮助。

【问题讨论】:

    标签: qt dynamic qml qtabwidget qt5.1


    【解决方案1】:

    您不需要为了添加它而对QTab 进行子类化。 QTabWidget 有一个方便的方法int QTabWidget::addTab(QWidget * page, const QString & label)。您可以直接将您的小部件添加到QTabWidget

    描述链接:http://qt-project.org/doc/qt-5/qtabwidget.html#addTab

    【讨论】:

      【解决方案2】:

      有没有一种方法可以子类化 QTab 并重用该类 对于每个标签

      是的,你可以继承 QTabWidget。没有什么能阻止你这样做。但是如果只是设置UI,我通常会这样做

      QLayout* setupViewLayout()
      {
         //add bunch of stuff to layout
      }
      
      QTabWidget * tabwidget = new QTabWidget ;
      QLayout* tablayout = setupViewLayout();
      QWidget* widget = new QWidget;
      
      widget->setLayout(tablayout );
      tabwidget->addTab(widget);
      

      而且我不需要为我想要的每种视图创建一个类。

      无论如何我可以为每个 QML 做类似的事情吗 子类?

      是的,您有用于 QML 的 qt quick designer 和用于创建将编译为 c/c++ 的 ui 文件的 Qt designer。您可以以图形方式创建一些提供初始设置的模板 UI,然后在代码中添加特定的自定义如果只有几个子小部件在不同的选项卡之间发生变化,这可能是少数。我也对基于选项卡的 UI 做了类似的事情。

      【讨论】:

      • 非常感谢您的帮助。我对 Qt Quick Designer 很陌生,哈哈,但我在 qt 方面进展很快。至于标签,我真的认为它们需要为每个标签进行子分类,所以它类似于:QTabWidget->addTab(new CustomTabClass());因为对于每个选项卡,该课程中都会发生很多事情。例如。每个选项卡都有自己的 QThread 类,用于填充聊天窗口。如果将其归类,所有这些事情都会更容易完成,但我再次愿意接受建议,因为我以前从未制作过这个级别的应用程序。
      • CustomTabClass 可以是 QWidget 的子类。但是你不需要继承 QTabWidget
      • 谢谢。阅读您的答案后,我尝试了它,它就像一个魅力。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多