QT代码的组织

Organization of the QT Code

本文关键字:代码 QT      更新时间:2023-10-16

我正在编写一个中等大小的应用程序。我将有许多 gui 组件和许多类。但是,我很难组织代码,分离逻辑,...例如,假设我按下一个按钮来创建类的对象并对该对象执行计算。退出按钮的插槽功能后,此本地对象将被销毁。如果我以后在另一个函数中需要它怎么办?将所有内容定义为头文件中的全局变量对我来说不是一件好事。所以我在考虑一个静态类,它以某种方式包含指向我稍后需要的所有对象的指针。有人有更好的主意吗?

如何管理应用程序内的对象总是一个棘手的问题问题。Qt走上了一条非常面向对象的路线,并使用引用通过指针实现的语义几乎适用于所有内容。自防止繁琐的手动内存管理 Qt将所有内容组织成对象树。这由Qt自己的增强添加的对象模型一些动态功能。

如果你想走这条路,坚持Qt提供的一切。它比通常的C++方法更类似于Java,并且可能是对初学者来说更舒适,也许适合您的应用域。它将您的代码与Qt紧密绑定,并且很难与它分开。

另一种方法意味着简单地放弃所有Qt的东西并制定应用程序的核心逻辑。在纯C++中开发它,而不是有一个薄层,通过信号和插槽。在这种方法中,您将选择使用更多值语义。

对于创建并保留算法的具体示例周围。Qt方法:

class MyAlgo : public QObject {
  Q_OBJECT
public:
    MyAlgo(QObject* o) : QObject(o) { }
    virtual compute();
};
// use it in a mainwindow slot
void MainWindow::executeAlgorithm(const QString& name) {
   MyAlgo* algo = this->findChild<MyAlgo*>(name);
   if(!algo) {
     // not found, create
     algo = new MyAlgo(this); // make mainwindow the parent of this algo
     algo->setName(name); // QObject name property
   }
   algo->compute();
}