2012-08-07 53 views
1

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

+0

当你说“对象”时,你是指'QObject'实例吗?这些通常是用'new'构造的,因此不会自动销毁,除非显式地删除''或者'QObject :: parent()'被销毁。所以你通常在'QObject'层次上做你的记录:保持对子对象的引用,并且遍历对象层次结构以随时访问对象。 – 2012-08-07 13:55:48

+0

不,我的意思只是一个自定义类的对象。假设我正在创建A类的局部对象。一旦退出函数,该对象就会被销毁。所以你需要把他留在某个地方。在一个Gui应用程序中,一切都是分布式的,并且取决于事件......我正在寻找组织我的代码的最佳解决方案。我想避免只有一个类(我的主类)在其中存储所有内容 – ISTB 2012-08-07 14:00:45

回答

2

如何管理应用程序内的对象始终是一个棘手的问题 问题。 Qt进入了一个非常面向对象的路线,并使用通过指针实现的几乎所有内容的参考 语义。到 防止繁琐的手动内存管理Qt将所有东西组织成 Object Trees。这 增加了Qt自己的 object model,它增加了 一些动态功能。

如果你想沿着这条路线走下去,坚持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(); 
} 
+0

感谢QT方法,但我正在使用C++寻找一个通用方法。例如,我听说Singleton模式足以让事物具有全局性。然而,有缺点......但在这一点上,我需要使用它,因为除此之外,你可以保存你的东西吗?在OOP中,你有对象与他们的状态,或者你以某种方式做一个分布式系统,在这个系统中对象可以相互通信(但我不知道如何实现这个目标),或者你保持中心:Singleton模式的全局方法。 – ISTB 2012-08-08 09:01:21

+0

@ISTB为什么不只是将查找缓存作为MainWindow类或'QApplication'子类的成员?这听起来对我来说是个好地方。 – pmr 2012-08-08 12:56:52

+0

我只是想在面向对象的编程中组织这个cose最好的方法是什么。而且,只要我知道,设计模式应该有所帮助。在这种特殊情况下,Singleton似乎是完美的,但我不确定是否有更好的解决方案。如果我继承QApplication,我会遇到同样的问题,但只是在另一个地方...... – ISTB 2012-08-09 10:04:03