关于Qt下switch.case 语句改写的有关问题,求大神们支招。
关于Qt下switch...case 语句改写的问题,求大神们支招。。
因为项目需要扩展功能,原先用以下形式写的语句太多了,想换种写法。
在网上查了查貌似有两种形式:函数指针或者State模式。
不过对于函数指针,Qt的signal貌似不能有函数指针。因为
signal不能声明成类的静态函数,所以会报
如果用state模式,我应该怎么设计呢?(感觉以上形式的代码不适用与state模式。。)
还有没有更好的或者更简单的方法呢?
------解决方案--------------------
看你的需求,如果只是用state模式,必然造成很多的状态类,所以再加上工厂模式,用于创建状态类。
------解决方案--------------------
这个说白了就是 TYPE 和 类的成员函数 的一对一对应,怎么跑出来的静态函数?
一个二维数组就搞定了。
------解决方案--------------------
signal 参数用 TYPE,slot 函数根据 TYPE 去数组找函数
因为项目需要扩展功能,原先用以下形式写的语句太多了,想换种写法。
switch(TYPE)
{
case TYPE1:
emit signalTypeOne(TYPE);
break;
case TYPE2:
emit signalTypeTwo(TYPE);
break;
...
default:
break;
}
在网上查了查貌似有两种形式:函数指针或者State模式。
不过对于函数指针,Qt的signal貌似不能有函数指针。因为
typedef void (*fun_t)(int type);
typedef struct
{
int type;
fun_t fun;
}list_t;
static const list_t lists[] =
{
{TYPE1, signalTypeOne},
{TYPE2, signalTypeTow},
...
};
...
signal不能声明成类的静态函数,所以会报
argument of type 'void (main_form::)()' does not match 'void (*)(int)'的错误...
如果用state模式,我应该怎么设计呢?(感觉以上形式的代码不适用与state模式。。)
还有没有更好的或者更简单的方法呢?
------解决方案--------------------
看你的需求,如果只是用state模式,必然造成很多的状态类,所以再加上工厂模式,用于创建状态类。
------解决方案--------------------
这个说白了就是 TYPE 和 类的成员函数 的一对一对应,怎么跑出来的静态函数?
一个二维数组就搞定了。
------解决方案--------------------
signal 参数用 TYPE,slot 函数根据 TYPE 去数组找函数