我该如何将我的长函数移出主窗口(QT)



我正在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>
}

这对我来说似乎很笨拙,因为我在主窗口代码中有一大块与主窗口无关的逻辑(除了从ui中获取一堆变量)。在文件中导航也变得非常困难,因为所有的按钮按下的方法都混合在这个长g代码操作方法中。

我是新的c++和Qt,我仍然得到头文件和源文件的hang。重构代码的最佳方式是什么?我应该:

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

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

  3. 让它保持原样,没有问题
  4. 还有什么我没想到的吗?

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

  1. 创建"Parameters"one_answers"Parser"对象。
  2. 监听用户动作的插槽(和连接)。
  3. 插槽(和连接)侦听从"Parser"发出的信号,以便在主窗口ui上显示输出。

实际上,你可以选择很多方法来重构你的代码(你可以看看MVC模式)。为了找到最好的一个,需要经验,研究设计模式,最重要的是考虑应用程序的需求,使其在未来易于扩展的需求,以及在将来进行添加时不受影响的封闭代码块的能力。这只是我的方法。祝你好运,如果你需要的话,我很乐意再次帮助你。

最新更新