0

我创建了一个传统的 Qt(基于小部件)GUI,如下所示:MainWindow::MainWindow(parent) : QMainWindow(parent)

这是由 Qt Creator 设计为表单 ( mainwindow.ui),又名Design Mode. 一切正常。但是带有所有小部件、初始化相应模型和功能的 GUI 代码会退出很长时间。我想重构为小单元。我想出的东西:

  1. 我尝试使用专门的(派生的)小部件。示例:A createdMyTableView::QTableView包含专用模型,以及模型和小部件之间的信号/槽处理。这减少了MainWindow. 但是,我确实失去了通过 Qt Creator 设计 GUI 的能力 Design mode
  2. 到目前为止,我想出的最好的办法是泄露源代码(多个cpp文件)。它仍然代表一个类,但一个文件中的代码更少。

那么,我怎样才能更好地划分我的 GUI 类呢?

4

3 回答 3

1

您可以创建自己的 Qt 小部件并将它们注册到 QtDesigner。然后,您将能够在表单上使用它们作为 QLabels 和朋友。看到这个链接

于 2014-03-06T04:56:11.143 回答
1

在最近的一个项目中,我们有非常严格的解耦要求(尤其是不要与 Qt 过于紧密地联系起来)。我们过去基于类似 MVC 的模式做的是:

  • 实现一个控制应用程序工作流的控制器
  • 在与控制器通信的每个屏幕上添加一个 GUI“适配器”类。假设 HomeScreen 类,SecondScreen 类
  • 每个适配器类都包含给定数量的小部件:TimelineWidget、FormWidget
  • 每个小部件都由一个 ui 成员 (Ui::TimelineWidget ui) 组成,该成员是从使用 Qt 设计器设计的 .ui 文件生成的

请注意,这种结构可能不适合小型项目。

于 2014-03-06T09:01:59.610 回答
1

如果您仍然想通过派生的小部件来解耦小部件的初始化,您可以使用 Qt 设计器中的“提升到...”选项。脚步:

  1. class MyTableView : public QTableView {},所以表格视图的初始化被移到了 MyTableView 的构造函数中。
  2. 在Qt Designer中,打开ui窗体(MainWidow.ui),在上面拖拽一个QTableView;
  3. 鼠标右键单击QTableView,在提示菜单中,有一个“升级到”选项,打开它
  4. 在“promoting widget”对话框中,指定你自定义的QTableView的类名和头文件,比如MyTableView,MyTableView.h。此步骤需要现有的自定义类和头文件。

借来一张图: http://developer.nokia.com/community/wiki/images/thumb/9/90/MBA_promote_to.png/800px-MBA_promote_to.png

于 2014-03-06T11:31:38.463 回答