struct ConnectInfo { const QObject *sender; //发送者 const char *signal_str; //发送信号 const QObject *reciever; //接收者 const char *sig_slot_str; //接收(信号/槽) Qt::ConnectionType connect_type; //连接类型 }; class SignalController :public QObject { Q_OBJECT public: //************************************ // Method: setConnectInfo // FullName: SignalController::setConnectInfo // Access: public static // Returns: void // Qualifier: 连接connectList中的信号与(槽/信号) // Parameter: struct ConnectInfo * connectList // Parameter: int item_num //************************************ static void setConnectInfo(struct ConnectInfo *connectList,int item_num); static SignalController *getSignalController(QObject *parent = NULL) //获取单实例句柄 { if (instances == NULL) { instances = new SignalController(parent); instances->setObjectName("SignalController"); } return instances; } virtual ~SignalController() { instances = NULL; qDebug() << "delete SignalController instances "; } private: static SignalController *instances; //单实例句柄 SignalController(QObject *parent = NULL) :QObject(parent) { registerMetaALLType(); } explicit SignalController(const SignalController &):QObject(NULL) {} SignalController &operator=(const SignalController &) { return *this; } void registerMetaALLType(); //注册自定义信号参数类型
CPP
void SignalController::setConnectInfo(struct ConnectInfo *connectList, int item_num) { int i = 0; for (i = 0; i < item_num; i++) { connect(connectList[i].sender, connectList[i].signal_str, connectList[i].reciever, connectList[i].sig_slot_str, connectList[i].connect_type); } } SignalController *SignalController::instances = NULL;