Qt c ++比许多信号槽更好的方式

时间:2016-11-22 08:11:06

标签: c++ qt signals-slots

我有一个关于信号槽的问题:

假设我有两个类CL_A,CL_B

class CL_A : public QObject
{
  Q_OBJECT
private:
  int a,b,c;                  // in reality I have more than 3 variables 
                              // that need to be set
public:
  void set_a ( int par_a);
  void set_b ( int par_b);    // in reality I have more than 3 setters
  void set_c ( int par_c);    // I also have getters and other methods     
  ...
};

CL_B * cl_b = new CL_B();

从CL_B我想使用CL_A的setter来设置类CL_A的变量a,b,c。为此,我为每个setter设置信号槽连接。现在我的问题是:

是否有更好的方法可以做到这一点,而不是拥有大量的信号槽连接(每种方法一个)?

1 个答案:

答案 0 :(得分:-1)

我认为这些类实际上是QObject后代,或者你根本不能使用信号槽。 "更好的"方式取决于实际想做什么。这应该是线程安全的,其他对象是全局的还是其他线程使用的?应该是异步的吗?如果回答是肯定的,您需要信号或其他同步方法,对您正在使用的库有效。

QSignalMapper(How works QSignalMapper?)可能允许创建一些通用的单一处理程序来处理多个事件,但是如果你的字段不是某些元组或数组,你将如何推广这些事件?

您可以使用其他C ++模式。如果代码不是时间敏感的,而是创建易于支持的代码,您可以考虑创建将字段名称映射到其地址的类,这样您就可以执行类似

的操作

cl_b [" Speed"] = value;

我建议你去看看Stephen C. Dewhurst" C ++ Gotchas"