没有这样的插槽/信号(Qt)

No such Slot/Signals (Qt)

本文关键字:信号 Qt 插槽      更新时间:2023-10-16

对象::connect:没有这样的信号RollsRoyceTab::signal_ValueChange(int aValue(

在以下类别中:

class RollsRoyceTab : public QWidget
 {
     Q_OBJECT
 public:
     RollsRoyceTab(QWidget *parent = 0);
 public slots:
     void aValueChange(int);
     void rrValuesHolder(int aValue, int bValue, int cValue);
signals:
     void signal_aValueChange(int aValue);
 private:
     int aValue, bValue, cValue;
 };

连接的地方,比如:

connect(this,SIGNAL(signal_aValueChange(int aValue)),
    this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue))); 

以下是实际实现:

 void RollsRoyceTab::aValueChange(int aValue)
 {
     ...
     emit signal_aValueChange(aValue);
 }
void RollsRoyceTab::rrValuesHolder(int aValue, int bValue, int cValue)
 {
     qDebug() << aValue;
 }

写连接的流行方式是什么
connect(... this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue)));
或者只需要写入一个值CCD_ 2?

第一:QObject::connect((中的信号和插槽应该没有变量名。

第二:不能将一个参数的信号与三个参数的SLOT连接起来。SIGNAL的参数不能少于SLOT。

它应该用于例如:

connect(this,SIGNAL(signal_aValueChange(int)),this,SLOT(rrValuesHolder(int)));

这只是对此的简单解释。如果你用一个参数发出信号(例如QString(,slot怎么知道其他两个参数是什么?对我来说,这是合乎逻辑的。

"SIGNAL((宏的参数不能少于传递到SLOT((宏中的签名。

所有这些都会起作用:

connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed(Qbject*)));
connect(sender, SIGNAL(destroyed(QObject*)), this, SLOT(objectDestroyed()));
connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed()));

这不起作用:

connect(sender, SIGNAL(destroyed()), this, SLOT(objectDestroyed(QObject*)));

我认为你应该打电话给value SLOT(rrValuesHolder(int))

参考:http://qt-project.org/doc/qt-4.8/signalsandslots.html

编辑:Blood包含了一条我忽略的额外信息,信号和插槽应该在没有变量名的情况下连接!