c++ - Qt GUI 小部件源文件的重构/分区

标签 c++ qt refactoring qtwidgets

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

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

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

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

最佳答案

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

  1. class MyTableView : public QTableView {},因此 TableView 的初始化被移至 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

关于c++ - Qt GUI 小部件源文件的重构/分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22213178/

相关文章:

c++ - 为什么移动构造函数需要其成员的默认构造函数?

c++ - QPushButton setIcon 不工作

c++ - 为什么 QList 不是从 QObject 派生的?

java - 如何用许多 if 结构重构一个大函数?

java - 如何重构超过 50000 行的 Java 文件?

c++ - 处理数组

c++ - 与动态加载的库共享数据(dlopen、dlsym)

C++ 在 Mac 上查找执行路径

windows - 我在哪里可以获得 dll 以在 Windows 上的 Qt 中部署应用程序?

c# - ASP.NET MVC View 在大规模重构后看不到任何类