在 Qt5 中如何获取从信号到槽的数据传输?

How can I acquire the data transferring from signal to slot in Qt5?

好吧,我是 Qt 的新手,现在正在使用信号和槽。我想定义一个信号

void send(int);

并在 A.cpp 中发出此信号,其中包含一些 int val,例如“5”

emit send(5);

之后,在B.h中,我定义了一个slot

void receive(int i);

使用连接函数,我连接了信号和槽

connect(a,&a::send,b,&receive);

然后这两个刚刚连接并且int值5被成功传输到slot receive。它也可以用于接收区域。 但困扰我的是,我如何获取这个值或这个'5'并在接收函数之外使用它。这几天一直卡在这一步,希望有人能给我一些想法或指导,非常感谢。

假设你的 B class 看起来像这样,创建一个成员并将收到的值存储在那里。

class B : public QObject
{
    Q_OBJECT

public:
    explicit B(QObject *parent = nullptr) noexcept : QObject{parent} {}

    void received(int value) { m_receivedValue = value; }

private:
    int m_receivedValue{0};
};

在您的方法中,您可以使用存储的值,例如

void printReceivedValue() const noexcept { qDebug() << "ReceivedValue:" << m_receivedValue; }


我最初将 m_receivedValue 设置为 0 的原因是您应该始终在使用前初始化值。如果您只使用 int m_receivedValue;,那将导致它最初具有垃圾值。您当然可以选择自己的值来表示“未初始化”或“未设置”。

如果你看的时候值为0,那么要么你发送了0,要么在slot被触发之前读取了它。为了更方便你可以直接在received中打印m_receivedValue,然后你会看到它什么时候更新。

记住信号和槽使用事件循环,这意味着连接的槽不会立即被调用,而是在事件循环 returns 时被调用。 因此发出信号并直接读取值将不起作用,除非它是 Qt::DirectConnection.

void received(int value)
{ 
    m_receivedValue = value; 
    printReceivedValue();
}