class test
{
public:
test();
......
private slots:
void Slot(int i);
private:
....
};
test::test()
{
.....
connect(pushbutton_1,SIGNAL(clicked()),this,SLOT(Slot(1)));
connect(pushbutton_2,SIGNAL(clicked()),this,SLOT(Slot(2)));
connect(pushbutton_3,SIGNAL(clicked()),this,SLOT(Slot(3)));
}
void test::Slot(int i)
{
.......
}
菜鸟求教:执行结果是 ;No such slot Drawer::Slot(1);No such slot Drawer::Slot(2);No such slot Drawer::Slot(3);
请问槽函数怎么才能传参,求解决方法?
信号和槽参数类型必须一致,而且有一点,在connect的时候是不能直接传参数的,看你的意思是想多个按键的信号连接多个槽,有两种办法,
一:如果你想用clicked()信号,那槽函数只能是slot(),不能是slot(int),这样信号和槽的参数类型不一致,必然会报错,而且你还在connect的时候传进去参数了。你可以选择定义多个槽函数与每个按钮相对应。
二:你自己定义一个槽函数emitSignal(),将clicked()与其相连,然后在该槽函数中发射一个信号signal(int),这样就可以与你的slot(int)相连了,参数是通过函数调用实现传递,不会出现在connect中
举个简单的例子
槽函数
void emitSignal()
{
int i;
emit signal(i);
}
然后connect(...,SIGNAL(signal(int)),...,SLOT(slot(int)))
这样写就可以把参数传递出去了,我只是简单的举个例子,具体怎么实现还是看你自己多查资料了
方法1:
connect(button1, SIGNAL(clicked()), this, SLOT(buttonClick()));
connect(button2, SIGNAL(clicked()), this, SLOT(buttonClick()));
button1.setObjectName("1");
button2.setObjectName("2");