我有一个关于信号槽的问题:
假设我有两个类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设置信号槽连接。现在我的问题是:
是否有更好的方法可以做到这一点,而不是拥有大量的信号槽连接(每种方法一个)?
答案 0 :(得分:-1)
我认为这些类实际上是QObject后代,或者你根本不能使用信号槽。 "更好的"方式取决于实际想做什么。这应该是线程安全的,其他对象是全局的还是其他线程使用的?应该是异步的吗?如果回答是肯定的,您需要信号或其他同步方法,对您正在使用的库有效。
QSignalMapper(How works QSignalMapper?)可能允许创建一些通用的单一处理程序来处理多个事件,但是如果你的字段不是某些元组或数组,你将如何推广这些事件?
您可以使用其他C ++模式。如果代码不是时间敏感的,而是创建易于支持的代码,您可以考虑创建将字段名称映射到其地址的类,这样您就可以执行类似
的操作cl_b [" Speed"] = value;
我建议你去看看Stephen C. Dewhurst" C ++ Gotchas"