我正在用 Qt 编写一个程序,我使用 QOpcUaNode 类。至此,我只需要使用 writeAttribute 在 OPC 上进行写入,并且工作正常(这意味着据我所知,我的节点设置正确)。现在,我还需要读取存储在节点中的信息,但我无法让它工作,当我尝试使用 qDebug() 显示属性时总是收到 QVariant(Invalid)
根据我在文档中阅读的内容,必须先发出信号 attributeRead,然后才能读取节点。我尝试了两种不同的方法来发出这个信号:readAttributes(QOpcUa::NodeAttribute::Value) 和 readValueAttribute() 这是我的代码,Flow 是我的 QOpcUaNode*,m_custom 是我的类的 bool 成员,最初设置为 false:
connect(Flow, &QOpcUaNode::attributeRead, this, &OPC_Client::custom);
qDebug() << Flow->readValueAttribute();
qDebug() << Flow->readAttributes(QOpcUa::NodeAttribute::Value);
int i(0);
while (m_custom != true) {qDebug() << i; i++;}
custom 是一个简单的插槽 m_custom = true; 当我编译并启动程序时,一旦到达这些行, i 的值就会上升并且永远不会停止,这意味着我认为信号永远不会发出。我第一次尝试不使用 while 循环,只读取值而不等待并收到 QVariant(Invalid)...
我使用 Flow ->writeAttribute(QOpcUa::NodeAttribute::Value, true ,QOpcUa::Types::Boolean); 一切正常。
有人可以帮我吗?