将功能连接到动态制作的QPushButton

时间:2019-01-18 14:50:34

标签: c++ qt c++11

对不起,这个问题可能是重复的,但是我不得不问,因为我无法使其正常工作。

我正在用这样的for循环动态制作QPushButtons

 for (int var = 0; var < size; ++var) {
     QPushButton *copyr = new QPushButton("copy");
     ...
}

我已经成功地将这些新的小部件添加到布局中,但是我无法在其上绑定功能。我试图像互联网上的许多来源所建议的那样连接SLOT上的该按钮:

connect (copyr , SIGNAL( clicked() ), this, SLOT( c2c(txt) ) );

但是我无法使其正常工作,并且我正在kp遇到类似:

的错误
No such SLOT ClassName::c2c(txt)

事件通常在.h文件中定义,并且也存在于.cpp文件中。 任何想法为什么会发生这种情况以及如何解决呢?

1 个答案:

答案 0 :(得分:1)

首先,对连接使用新的语法:

connect(copyr, &QPushButton::clicked, this, &ClassName::c2c);

但是,您不能将不提供参数的信号连接到需要一个信号的插槽。在这里,您有多种选择:

  • 从插槽中完全删除参数,并从插槽中获取值。
  • 在插槽声明中提供默认参数,以便可以在不使用参数的情况下调用
  • 如果希望连接代码中的参数到达插槽,则将连接包装在lambda中:

    connect( copyr, &QPushButton::clicked, [this, txt](){ this->c2c(txt); } );