2016-11-22 55 views
0

我有一個關於信號槽孔一個問題:Qt的C++優於許多信號時隙的方式

可以說我有2班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我想使用的setter方法的CL_A設置類CL_A的變量a,b,c。爲了做到這一點,我爲每個設置者設置了信號插槽連接。現在我的問題是:

有沒有更好的方法來做到這一點,而不是有很多的信號插槽連接(每種方法一個)?

+2

您可以將指針傳遞給'A'成'B'和直接調用的東西。無論如何,當內部物體必須在外部物體中設置某物時,情況似乎是乍一看不好的設計。 – SingerOfTheFall

+0

您希望通過同一類型的信號插槽設置「CL_A」成員變量(如示例中所示)? – Tomas

+3

這取決於很多上下文。如果你同時設置它們,那麼你可以傳遞一個結構,而不是單獨傳遞每個值。但是你應該編輯這個問題並且提供一些你實際想要做的事情的細節。 – thuga

回答

-1

我假設這些類實際上是QObject的後代,或者根本不能使用信號時隙。 「更好」的方式取決於實際想要做什麼。這是否應該是線程安全的,其他對象是全局的還是其他線程使用的?它應該是異步的嗎?如果回答是肯定的,你需要信號或其他同步方法,對你正在使用的庫有效。 QSignalMapper(How works QSignalMapper?)可能允許創建一些通用的單個處理程序來處理多個事件,但是如果您的字段不是某些元組或數組,那麼您將如何概括這些事件?

您可以使用其他C++模式。如果代碼不是時間敏感的,而是創建容易支持的代碼,那麼您可以考慮創建一個將字段名稱映射到其地址的類,以便您可以執行如下操作:

cl_b [「Speed 「] =值;

我建議您在斯蒂芬C.杜赫斯特「C++陷阱」看