我应该如何将我的长函数移出MainWindow(QT)

时间:2016-09-16 19:11:12

标签: c++ qt refactoring

我在QT写了一个G-Code后处理器。该应用程序基本上让用户选择要使用的文件,选择一些参数,然后解析文件并稍微操作它。

现在,当用户决定保存新编辑的文件时,我将所有操作都作为一个函数调用。

void MainWindow::on_writeGcodeButton_clicked()
{
    writeGcode();
}

void MainWindow::writeGcode(){
    <Get a bunch of info from  the ui>
    <Search through a file and manipulate it>
    <Output result>
}

这对我来说似乎很笨拙,因为我在MainWindow代码中有这个与MainWindow无关的逻辑(除了从ui中获取一堆变量)。它也很难在文件中导航,因为所有按钮按下的方法都混合了这种长G-Code操作方法。

我是C ++和Qt的新手,我仍然掌握着标题和源文件。对我来说,重构代码的最佳方法是什么?我应该:

  1. 创建一个新类,并使用静态方法填充它,该方法将从主ui收集的所有信息作为参数?

    //gcodeParser.cpp
    public static void writeGcode(String a, String b, String c ....) {
        //Search through file, manipulate, output result
    }
    
  2. 创建一个新的解析器类,并实例化它。 (这对我来说似乎不是一个好主意......)

  3. 保持原样,没有问题
  4. 我还没有想到的其他东西?

1 个答案:

答案 0 :(得分:0)

一个好主意是创建一个结构并将其命名为“Parameters”,它将包含可以从ui设置的每个参数的变量。您将在mainwindow类中创建一个Parameter实例,并在单击“OK”或用户(例如按下按钮)时设置其值。一个很好的建议是为您的结构设置一些默认参数。 在此之后创建一个类并将其命名为“Parser”,其中包含其构造函数的参数,文件的完整文件路径以及“Parameters”对象的引用。在这个类中创建与搜索或操作有关的方法。 最后,(假设您的输出显示在mainwindow.ui上),您可以发出信号,通过输出信息传递主窗口的插槽,以便显示在主窗口的控件上。 最后,你必须只有mainwindow.cpp:

  1. 创建“参数”和“解析器”对象。
  2. 听取用户操作的插槽(和连接)。
  3. 用于侦听从“Parser”发出的信号的插槽(和连接),以便在mainwindow.ui上显示输出。
  4. 实际上有很多方法可以选择重构代码(你可以看看MVC模式)。并找到最佳的需求经验,研究设计模式,最重要的是考虑应用程序的需求,使其在未来易于扩展的需求以及具有不受影响的封闭代码块的能力将来还会有一个补充。这只是我的方法。祝你好运,如果你需要,我很乐意再次提供帮助。