在 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();
}
好吧,我是 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();
}