C++ 带默认参数的Qt插槽
我有一个旋转控件块,可以改变数组中的单个元素 我不想单独使用接收器插槽功能,而是只需指定在信号中发送消息的控件 你可以用QSignalMapper来完成这一点,但是,下面是否有这样做的方法C++ 带默认参数的Qt插槽,c++,qt,signals-slots,C++,Qt,Signals Slots,我有一个旋转控件块,可以改变数组中的单个元素 我不想单独使用接收器插槽功能,而是只需指定在信号中发送消息的控件 你可以用QSignalMapper来完成这一点,但是,下面是否有这样做的方法 spin0 = new QDoubleSpinBox; connect(spin0,SIGNAL(valueChanged(double)),this,SLOT(handler(0,double)); spin1 = new QDoubleSpinBox; connect(spin1,SIGNAL(valu
spin0 = new QDoubleSpinBox;
connect(spin0,SIGNAL(valueChanged(double)),this,SLOT(handler(0,double));
spin1 = new QDoubleSpinBox;
connect(spin1,SIGNAL(valueChanged(double)),this,SLOT(handler(1,double));
....
private slot:
void handler(int element,double value);
我不这么认为,至少不用那个语法。。。
SIGNAL
和SLOT
宏将其参数转换为字符串,然后在编译的预处理阶段,Qt运行时解析并使用这些字符串在moc
创建的表中查找相关函数和/或类方法。因此,如果您将默认参数编码到SLOT
宏中,那么这不是一个有效的函数签名,Qt可以使用它在运行时查找moc
生成的函数表中的实际SLOT函数。可以从任何插槽处理程序获取指向发送信号的对象的指针。然后,您可以使用该属性来传递任何进一步的标识信息。但是,Receiver函数需要了解gui的许多详细信息-即。是否可以访问所有spincontrol对象我不确定我是否理解您的意思。如果将每个旋转控件上的对象名设置为“0”、“1”等,则在处理程序中可以使用sender()->objectName().toInt()
来实现上述内容。处理程序只需要知道QObject
发送的信号。只是为了分类,sender()
是handler()
所在对象的函数。不需要知道所有的spin控件。好的,使用对象名,是的,这是一个很好的解决方案。我正在考虑比较sender()和spin0 ptr,后者将gui与处理程序耦合得太紧密了!啊,是的,这将是一个紧密耦合:)