我有2节课.A级和B级.我发出A级信号,我希望B接收.
我是这样做的
在监听器文件中
Header File:
Class Listener:public DDSDataReaderListener
{
//Some code
public:
A m_objectSendData;
}
Run Code Online (Sandbox Code Playgroud)
实施档案:
void Listener::ondataavailable(DDSDataReader *reader)
{
m_objSendData.GetDDSData();
}
Run Code Online (Sandbox Code Playgroud)
在A班
头文件:
Class A:public QObject
{
Q_OBJECT
public:
void GetDDSData();
signals:
void Signal_Data();
}
Run Code Online (Sandbox Code Playgroud)
.cpp文件
A::A(QWidget *parent):QObject(parent)
{
}
void A::GetDDSData()
{
emit Signal_Data();
}
Run Code Online (Sandbox Code Playgroud)
在B班
Header File:
Class B:public QObject
{
Q_Object
public:
A objGetData;
public slots:
void getData();
}
Implementation File:
B::B(QWidget *parent):QObject(parent)
{
//Some part of code
connect(&objGetData,SIGNAL(Signal_Data()),this,SLOT(getData());
}
void B::getData()
{
//Watever is to be updated
}
Run Code Online (Sandbox Code Playgroud)
我试过调试.它会发射到正确的部分.然而,它没有到达插槽.有人可以帮我这个.谢谢.
The*_*ght 12
如果没有完整的代码,很难确定问题的确切问题,因此我将概述一些要检查的重点.
为确保您可以使用信号和插槽机制,您应确保从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();
};
Run Code Online (Sandbox Code Playgroud)
省略宏可能是最常见的错误.
要指定插槽,请将其添加到班级的公共或私人插槽部分: -
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.
};
Run Code Online (Sandbox Code Playgroud)
一旦在类中声明了一个信号,接收信号的插槽应与传入的参数匹配,当您将信号连接到插槽时,不得添加函数参数名称.
因此: -
connect(&objectA, SIGNAL(SignalA(int in), this, SIGNAL(SlotA(int param)); //will fail due to the argument names
Run Code Online (Sandbox Code Playgroud)
它应该是: -
connect(&objectA, SIGNAL(SignalA(int), this, SIGNAL(SlotA(int));
Run Code Online (Sandbox Code Playgroud)
最后,如果你使用的是Qt 5,你可以使用新的连接调用,它不需要你指定任何参数,而是使用槽和信号函数的地址.
connect(&objectA, &A::SignalA, this, &B::SlotA));
Run Code Online (Sandbox Code Playgroud)
由于它引用了函数的地址,实际上,函数不需要被归类为一个槽,仍然会被调用.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
17049 次 |
| 最近记录: |