C++ 将函数连接到动态创建的QPushButton
对不起,这个问题可能是重复的,但我不得不问,因为我不能让它工作 我用for循环动态生成C++ 将函数连接到动态创建的QPushButton,c++,qt,c++11,C++,Qt,C++11,对不起,这个问题可能是重复的,但我不得不问,因为我不能让它工作 我用for循环动态生成QPushButtons,如下所示 for (int var = 0; var < size; ++var) { QPushButton *copyr = new QPushButton("copy"); ... } 但我不能让它工作,我得到一个错误,如: No such SLOT ClassName::c2c(txt) 事件,它通常在.h文件中定义,也存在于.cpp文件中。 任
QPushButtons
,如下所示
for (int var = 0; var < size; ++var) {
QPushButton *copyr = new QPushButton("copy");
...
}
但我不能让它工作,我得到一个错误,如:
No such SLOT ClassName::c2c(txt)
事件,它通常在.h文件中定义,也存在于.cpp文件中。
任何IDE为什么会发生这种情况,以及如何解决它?首先,对连接使用新语法:
connect(copyr, &QPushButton::clicked, this, &ClassName::c2c);
但是,不能将不提供参数的信号连接到需要参数的插槽。在这里,您有多个选项:
- 从插槽中完全删除参数,并从插槽中获取值
- 在插槽声明中提供一个默认参数,这样就可以在没有参数的情况下调用它
- 如果希望连接代码中的参数以如下方式到达插槽,请将连接包装在lambda中:
connect(copyr,&QPushButton::单击,[this,txt](){this->c2c(txt);})代码>
connect(copyr,&QPushButton::clicked,this,&ClassName::c2c)代码> @戴夫,是的,我使用QT5,我是C++编程新手,2-3周前开始学习项目,所以我不熟悉新语法。我唯一能做的就是在谷歌上搜索答案,或者在这里询问是否一切正常。同样,这个旧语法在同一个项目中运行了好几次,没有任何错误。@DušanAtanacković您不能将一个带参数的插槽连接到一个不提供参数的信号。你可以把一个默认的参数添加到你的插槽中,完全删除它,或者使用lambda填充它。我猜你可以尝试把它连接到没有参数lambda,在里面你会得到线编辑文本并把它传递到线中。好的,你上面所有的问题的答案是我对C++编程是新的。我已经使用了QT,但正如python中的PyQt(例如),这要容易得多。我成功地用lambda发送了参数,如下所示。连接(copyr,&QPushButton::clicked,[=]{SuperFalcon::c2c(txt);});您的代码也可以工作,谢谢您的时间。
connect(copyr, &QPushButton::clicked, this, &ClassName::c2c);