Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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++ 将函数连接到动态创建的QPushButton_C++_Qt_C++11 - Fatal编程技术网

C++ 将函数连接到动态创建的QPushButton

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文件中。 任

对不起,这个问题可能是重复的,但我不得不问,因为我不能让它工作

我用for循环动态生成
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);})


您正在使用Qt5吗?如果是这样,您真的应该使用新的信号/插槽语法。
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);