gpt4 book ai didi

qt - 无法将信号连接到另一个类中的插槽

转载 作者:行者123 更新时间:2023-12-04 16:53:22 26 4
gpt4 key购买 nike

我有2节课。 A 类和 B 类。我正在从 A 类发出一个信号,我希望 B 类接收到该信号。

我正在按照以下方式进行操作

在监听器文件中

Header File:
Class Listener:public DDSDataReaderListener
{
//Some code
public:
A m_objectSendData;
}

实现文件:
  void Listener::ondataavailable(DDSDataReader *reader)
{
m_objSendData.GetDDSData();
}

在 A 类

头文件:
Class A:public QObject
{
Q_OBJECT
public:
void GetDDSData();
signals:
void Signal_Data();
}

.cpp 文件
 A::A(QWidget *parent):QObject(parent)
{
}

void A::GetDDSData()
{
emit Signal_Data();
}

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
}

我尝试调试。直到正确发射部分。但是它没有到​​达插槽。
有人可以帮我解决这个问题。
谢谢你。

最佳答案

如果没有完整的代码,很难确定问题的确切问题,因此我将概述一些需要检查的要点。

为确保您可以使用信号和槽机制,您应该确保您的类是从 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)的公共(public)或私有(private)插槽部分:-
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));

由于它引用了函数的地址,实际上,函数不需要归类为槽,仍然会被调用。

希望有帮助。

关于qt - 无法将信号连接到另一个类中的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18096961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com