如果没有完整的代码,就很难确定问题的确切问题,因此我将概述一些需要检查的重要点。
为了确保您可以使用信号和槽机制,您应该确保您的类是从 QObject 派生的,或者是从其层次结构中的 QObject 派生的类,并且您的类必须包含 Q_OBJECT 宏,例如: -
class A : public QObject // derived from QObject
{
Q_OBJECT // your class must have this macro for signals and slots
public:
A();
};
忽略宏可能是最常见的错误。
要指定插槽,请将其添加到类的公共或私有插槽部分:-
class B : public QObject // derived from QObject
{
Q_OBJECT // your class must have this macro for signals and slots
public:
B();
public slots:
void SlotB(); // slot declared public
private slots:
void SlotBPrivate(); // slot declared private.
};
一旦在类中声明了信号,接收信号的槽应与传入的参数相匹配,并且当将信号连接到槽时,不得添加函数参数名称。
所以: -
connect(&objectA, SIGNAL(SignalA(int in), this, SIGNAL(SlotA(int param)); //will fail due to the argument names
它应该是: -
connect(&objectA, SIGNAL(SignalA(int), this, SIGNAL(SlotA(int));
最后,如果您使用的是 Qt 5,则可以使用新的连接调用,它不需要您指定任何参数,而是获取槽函数和信号函数的地址。
connect(&objectA, &A::SignalA, this, &B::SlotA));
由于它引用了函数的地址,因此实际上,这些函数不需要归类为槽,仍然会被调用。
希望有帮助。