Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带默认参数的Qt插槽_C++_Qt_Signals Slots - Fatal编程技术网

C++ 带默认参数的Qt插槽

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

我有一个旋转控件块,可以改变数组中的单个元素 我不想单独使用接收器插槽功能,而是只需指定在信号中发送消息的控件

你可以用QSignalMapper来完成这一点,但是,下面是否有这样做的方法

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与处理程序耦合得太紧密了!啊,是的,这将是一个紧密耦合:)