【问题标题】:No such Slot/Signals (Qt)没有这样的插槽/信号 (Qt)
【发布时间】:2013-03-11 19:00:12
【问题描述】:

Object::connect: 没有这样的信号 RollsRoyceTab::signal_aValueChange(int aValue) ??????

我有

class RollsRoyceTab : public QWidget
 {
     Q_OBJECT
 public:
     RollsRoyceTab(QWidget *parent = 0);
 public slots:
     void aValueChange(int);
     void bValueChange(int);
     void cValueChange(int);
     void rrValuesHolder(int aValue, int bValue, int cValue);
signals:
     void signal_aValueChange(int aValue);
     void signal_bValueChange(int bValue);
     void signal_cValueChange(int cValue);
 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)
 {
     lcdAL->display(aValue);
     lcdAR->display(100 - aValue);

     emit signal_aValueChange(aValue);
 }

void RollsRoyceTab::rrValuesHolder(int aValue, int bValue, int cValue)
 {
     qDebug() << aValue;
     qDebug() << bValue;
     qDebug() << cValue;

 }

and connect(...... this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue)));还是只需要写一个值 SLOT(rrValuesHolder(int aValue)) ?

【问题讨论】:

    标签: c++ qt slot


    【解决方案1】:

    首先:QObject::connect() 中的信号和槽应该没有变量名。

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

    它应该是例如:

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

    这只是对此的简单解释。如果您发出带有一个参数的信号(例如 QString),插槽如何知道其他两个参数是什么?对我来说这是合乎逻辑的。

    【讨论】:

    • 好的。连接(这个,SIGNAL(signal_aValueChange(int,int,int)),这个,SLOT(rrValuesHolder(int,int,int)));发出信号_aValueChange(aValue, bValue, cValue);
    【解决方案2】:

    “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 包含了我忽略的另一条信息,信号和插槽应该在没有变量名的情况下连接!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      相关资源
      最近更新 更多