重构/分区Qt GUI小部件源文件

问题描述 投票:0回答:3

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

这是由Qt Creator设计的形式(mainwindow.ui),又名Design Mode。一切正常。但是包含所有小部件的GUI代码,初始化相应的模型和功能都会被放弃。我想重构小单位。我提出的事情:

  1. 我尝试使用专门的(派生的)小部件。示例:创建的MyTableView::QTableView包含专用模型,以及模型和窗口小部件之间的信号/槽处理。这减少了MainWindow中的代码量。但是,我确实失去了通过Qt Creator的Design mode设计GUI的能力。
  2. 到目前为止,我提出的最好的事情是拆分源代码(多个qazxsw poi文件)。它仍然代表一个类,但在一个文件中代码较少。

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

c++ qt refactoring qtwidgets
3个回答
1
投票

如果您仍希望通过派生窗口小部件来取消窗口小部件的初始化,则可以在Qt设计器中使用“promote to ...”选项。脚步:

  1. class MyTableView:public QTableView {},因此表视图的初始化被移动到MyTableView的构造函数中。
  2. 在Qt Designer中,打开ui表单(MainWidow.ui),然后在其上拖放QTableView;
  3. 右键单击QTableView,在提示菜单中,有一个“提升到”选项,打开它
  4. 在“促进小部件”对话框中,指定自定义QTableView的类名和头文件,例如MyTableView,MyTableView.h。此步骤需要现有的自定义类和头文件。

借了一张照片:


1
投票

您可以创建自己的Qt小部件并使用QtDesigner注册它们。那么你是否可以在表格上使用它们仅仅是QLabel和朋友。见cpp


1
投票

在最近的一个项目中,我们有非常严格的解耦要求(特别是与Qt没有太强关联)。我们过去基于类似MVC的模式做的是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.