1

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

4

1 回答 1

2

如何在应用程序中管理对象始终是一个棘手的问题。Qt 走的是一条非常面向对象的路线,几乎所有东西都使用通过指针实现的引用语义。为了避免繁琐的手动内存管理,Qt 将所有内容组织到 Object Trees中。Qt 自己的 对象模型增强了这一点,增加了一些动态功能。

如果你想走这条路,坚持 Qt 提供的一切。它比通常的 C++ 方法更类似于 Java,并且可能更适合初学者,并且可能适合您的应用程序领域。它将您的代码与 Qt 紧密联系在一起,并且很难从中分离出来。

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

对于您创建算法并保留它的具体示例。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();
}
于 2012-08-08T07:44:19.740 回答