0

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;

 }

そして connect(...... this,SLOT(rrValuesHolder(int aValue, int bValue, int cValue))); または、SLOT(rrValuesHolder(int aValue)) の値を 1 つだけ書き込む必要がありますか?

4

2 に答える 2

3

最初: QObject::connect() のシグナルとスロットには、変数名を付けないでください。

2 つ目: 引数が 1 つの信号を、引数が 3 つの SLOT に接続することはできません。SIGNAL の引数は、SLOT より少なくてはなりません。

たとえば、次のようにする必要があります。

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

そして、それは単にその説明です。1 つの引数 (QString など) でシグナルを送信する場合、スロットは他の 2 つの引数が何であるかをどのように認識しますか? 私にとっては論理的です。

于 2013-03-11T19:04:39.090 に答える
0

「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 には、私が無視した 1 つの追加情報が含まれていました。シグナルとスロットは、変数名なしで接続する必要があります。

于 2013-03-11T19:06:33.813 に答える