如何构造应用程序的代码

时间:2012-06-26 15:18:13

标签: qt

我有一个关于如何构造应用程序代码的一般性问题。 我使用QT作为GUI,通过单击不同的GUI元素,有一个相应的槽(事件处理程序)。所有这些都发生在Main Window类中。但现在我想知道如何更好地组织结构。例如,如果一个槽创建一个对象而另一个槽(函数)想要访问该对象,那么最佳解决方案是什么?我认为在主窗口中存储一个存储对象的变量并不理想。也许是一个普通的(静态?)类,它包含所有信息并且可以被所有人访问?

2 个答案:

答案 0 :(得分:1)

不要创建每个人都可以访问的静态类。一般来说,全球国家都很糟糕。

如果您需要让特定的qobjects知道某个对象发生的信号,那么显然需要将它们连接起来。如果对象将永远存在,那么您可能只是通过主窗口为您创建的对象提供父级,但这需要您可以在创建时将所有信号连接到此新对象。 / p>

在某些时候,您将需要存储需要在不同时刻动态连接和取消连接信号的对象集合。通常,您需要坐下来思考对象的用途并决定谁应该访问它。然后,您创建接口以管理此对象的创建,引用和销毁。然后,您创建这些接口的具体实现,并且只将其所需的功能传递给其他类。如果对象需要知道如何创建但不使用,则将创建者传递给该类。如果它需要知道如何使用而不是创建,则传递“用户”。这种情况可能会变得难以想象,因此您必须尽早做出明确的设计决策,将彼此分离出来。

有了你非常普遍的问题,这是我能提供的最好的。

答案 1 :(得分:0)

你问:“如果一个插槽创建一个对象而另一个插槽(函数)想要访问这个对象,那么最佳解决方案是什么?”

假设这是适合您特定应用的设计(大如果!),这很容易做到。只需将指针传递给新制作的实例作为信号中的参数即可。不能比那更简单。确保您决定(并坚持下去!)所创建实例的生命周期和所有权。下面的代码只是使新实例成为创建它的对象的子实例。这可能适用于您的特定情况,也可能不适用。

class Class : public QObject
{
  Q_OBJECT
public:
  Class(QObject * parent = 0) : QObject(parent) { ... }
signals:
  void madeNew(Class *);
public slots:
  void creator() {
    emit madeNew(new Class(this));
  }
  void consumer(Class * instance) {
    // do something with the new instance
  }
};