C++ Qt-GUI小部件源文件的重构/分区
我创建了一个传统的Qt(基于小部件)GUI,类似这样:C++ Qt-GUI小部件源文件的重构/分区,c++,qt,refactoring,qtwidgets,C++,Qt,Refactoring,Qtwidgets,我创建了一个传统的Qt(基于小部件)GUI,类似这样:MainWindow::MainWindow(父):QMainWindow(父) Qt Creator将其设计为表单(mainwindow.ui),也称为设计模式。一切正常。但是包含所有窗口小部件的GUI代码、初始化相应的模型和功能变得很长。我想重构成小单元。我想到的东西: 我尝试使用专门的(派生的)小部件。示例:创建的MyTableView::QTableView包含专用模型,以及模型和小部件之间的信号/插槽处理。这将减少main窗口中的代
MainWindow::MainWindow(父):QMainWindow(父)
Qt Creator将其设计为表单(mainwindow.ui
),也称为设计模式
。一切正常。但是包含所有窗口小部件的GUI代码、初始化相应的模型和功能变得很长。我想重构成小单元。我想到的东西:
MyTableView::QTableView
包含专用模型,以及模型和小部件之间的信号/插槽处理。这将减少main窗口中的代码量。但是,我确实失去了通过Qt Creator的设计模式设计GUI的能力李>
到目前为止,我想到的最好的办法是将源代码(多个cpp
文件)拆分。它仍然表示一个类,但一个文件中的代码更少
那么,我怎样才能更好地划分GUI类呢?您可以创建自己的Qt小部件并向QtDesigner注册它们。然后,您将能够在表单上使用它们作为Qlabel和朋友。请参见您可以创建自己的Qt小部件并向QtDesigner注册它们。然后,您将能够在表单上使用它们作为Qlabel和朋友。请参见您可以创建自己的Qt小部件并向QtDesigner注册它们。然后,您将能够在表单上使用它们作为Qlabel和朋友。请参见您可以创建自己的Qt小部件并向QtDesigner注册它们。然后,您将能够在表单上使用它们作为Qlabel和朋友。在最近的一个项目中,我们有非常严格的解耦要求(尤其是不要与Qt联系太紧密)。我们过去基于类似MVC的模式所做的是:
- 实现控制应用程序工作流的控制器
- 为每个与控制器通信的屏幕添加GUI“适配器”类。比如说主屏幕类,第二屏幕类
- 每个适配器类都包含给定数量的小部件:TimelineWidget、FormWidget
- 每个小部件都由一个ui成员(ui::TimelineWidget ui)组成,该成员由使用Qt designer设计的.ui文件生成
请注意,这种结构可能不适合小型项目。在最近的一个项目中,我们有非常严格的解耦要求(尤其是不要与Qt联系太紧密)。我们过去基于类似MVC的模式所做的是:
- 实现控制应用程序工作流的控制器
- 为每个与控制器通信的屏幕添加GUI“适配器”类。比如说主屏幕类,第二屏幕类
- 每个适配器类都包含给定数量的小部件:TimelineWidget、FormWidget
- 每个小部件都由一个ui成员(ui::TimelineWidget ui)组成,该成员由使用Qt designer设计的.ui文件生成
请注意,这种结构可能不适合小型项目。在最近的一个项目中,我们有非常严格的解耦要求(尤其是不要与Qt联系太紧密)。我们过去基于类似MVC的模式所做的是:
- 实现控制应用程序工作流的控制器
- 为每个与控制器通信的屏幕添加GUI“适配器”类。比如说主屏幕类,第二屏幕类
- 每个适配器类都包含给定数量的小部件:TimelineWidget、FormWidget
- 每个小部件都由一个ui成员(ui::TimelineWidget ui)组成,该成员由使用Qt designer设计的.ui文件生成
请注意,这种结构可能不适合小型项目。在最近的一个项目中,我们有非常严格的解耦要求(尤其是不要与Qt联系太紧密)。我们过去基于类似MVC的模式所做的是:
- 实现控制应用程序工作流的控制器
- 为每个与控制器通信的屏幕添加GUI“适配器”类。比如说主屏幕类,第二屏幕类
- 每个适配器类都包含给定数量的小部件:TimelineWidget、FormWidget
- 每个小部件都由一个ui成员(ui::TimelineWidget ui)组成,该成员由使用Qt designer设计的.ui文件生成
请注意,此结构可能不适用于小型项目。如果您仍然希望通过派生小部件来解耦小部件的初始化,可以使用Qt designer中的“升级到…”选项。步骤:
类MyTableView:publicQTableView{},因此表视图的初始化被移动到MyTableView的构造函数中李>
在Qt设计器中,打开ui表单(MainWidow.ui),并在其上拖放QTableView李>
鼠标右键点击QTableView,在提示菜单中,有一个“升级到”选项,打开它
在“升级小部件”对话框中,指定自定义QTableView的类名和头文件,例如MyTableView、MyTableView.h。此步骤需要现有的自定义类和头文件
借来一张照片:
如果您仍然希望通过派生小部件来解除小部件初始化的耦合,可以使用Qt designer中的“升级到…”选项。步骤:
类MyTableView:publicQTableView{},因此表视图的初始化被移动到MyTableView的构造函数中李>
在Qt设计器中,打开ui表单(MainWidow.ui),并在其上拖放QTableView李>
鼠标右键点击QTableView,在提示菜单中,有一个“升级到”选项,打开它
在“升级小部件”对话框中,指定自定义QTableView的类名和头文件,例如MyTableView、MyTableView.h。此步骤需要现有的自定义类和头文件
借来一张照片:
如果您仍然希望通过派生小部件来解除小部件初始化的耦合,可以使用中的“升级到…”选项