没有这样的插槽/信号(Qt)
问题描述:
Object :: connect:没有这样的信号RollsRoyceTab :: signal_aValueChange(int aValue) ??????没有这样的插槽/信号(Qt)
我有
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;
}
并连接(......此,SLOT(rrValuesHolder(INT安勤,INT bValue,INT cValue)));或者只需要写一个值SLOT(rrValuesHolder(int aValue))?
答
第一: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))
和借鉴e:http://qt-project.org/doc/qt-4.8/signalsandslots.html
编辑:血液包括一个额外的信息,我忽略了,信号和插槽应该连接没有变量名称!
好的。 connect(this,SIGNAL(signal_aValueChange(int,int,int)),this,SLOT(rrValuesHolder(int,int,int)));发出signal_aValueChange(aValue,bValue,cValue); – 2013-03-11 19:16:28