为 QML-Usage 返回 QString
returning QString for QML-Usage
idk 为什么,但我无法从 .qml-code 中的 .cpp-code 中读取 return 方法的 return 值,尽管我所做的一切在逻辑上都是正确的(我会只放代码的相关部分):
.h 文件:
public:
Q_INVOKABLE QString displayOnQml();
QString message;
public slots:
void updateMessage(const QMqttMessage &msg);
.cpp 文件:
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::updateMessage);
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::displayOnQml);
void mqtt::updateMessage(const QMqttMessage &msg)
{
message=msg.payload();
qDebug()<<message;
}
QString mqtt::displayOnQml()
{
return message;
}
.qml 文件
Text {
id: text1
x: 63
y: 68
text: mqttClient.displayOnQml()
font.pixelSize: 12
}
(我将 .cpp-Methodes 作为 engine.rootContext()->setContextProperty("mqttClient",mqttClient);
嵌入到 .qml 中,这样我也可以使用其他函数。)
最后的问题是:为什么通过调试我在 displayOnQml()
上捕获了 .cpp-File 中的断点(当我向主题发送一些数据时),但毕竟对象 message
没有“值”,尽管它是作为 public
声明的?而且,来自 .cpp-Methodes 的简单 returns(例如 1 或 0)仍在工作..
Q_INVOKABLE 不会创建绑定,因为您不知道字符串何时更改。在这种情况下,最好创建一个 Q_PROPERTY:
*.cpp
class mqtt: ...{
Q_OBJECT
// ...
Q_PROPERTY(QString message READ message NOTIFY messageChanged)
public:
// ...
QString message() const;
// ...
Q_SIGNALS:
void messageChanged();
// ...
private:
QString m_message;
// ...
};
*.h
void mqtt::updateMessage(const QMqttMessage &msg)
{
m_message = msg.payload();
Q_EMIT messageChanged();
}
QString mqtt::message() const{
return m_message;
}
Text {
id: text1
x: 63
y: 68
text: mqttClient.message
font.pixelSize: 12
}
idk 为什么,但我无法从 .qml-code 中的 .cpp-code 中读取 return 方法的 return 值,尽管我所做的一切在逻辑上都是正确的(我会只放代码的相关部分):
.h 文件:
public:
Q_INVOKABLE QString displayOnQml();
QString message;
public slots:
void updateMessage(const QMqttMessage &msg);
.cpp 文件:
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::updateMessage);
connect(m_sub, &QMqttSubscription::messageReceived, this, &mqtt::displayOnQml);
void mqtt::updateMessage(const QMqttMessage &msg)
{
message=msg.payload();
qDebug()<<message;
}
QString mqtt::displayOnQml()
{
return message;
}
.qml 文件
Text {
id: text1
x: 63
y: 68
text: mqttClient.displayOnQml()
font.pixelSize: 12
}
(我将 .cpp-Methodes 作为 engine.rootContext()->setContextProperty("mqttClient",mqttClient);
嵌入到 .qml 中,这样我也可以使用其他函数。)
最后的问题是:为什么通过调试我在 displayOnQml()
上捕获了 .cpp-File 中的断点(当我向主题发送一些数据时),但毕竟对象 message
没有“值”,尽管它是作为 public
声明的?而且,来自 .cpp-Methodes 的简单 returns(例如 1 或 0)仍在工作..
Q_INVOKABLE 不会创建绑定,因为您不知道字符串何时更改。在这种情况下,最好创建一个 Q_PROPERTY:
*.cpp
class mqtt: ...{
Q_OBJECT
// ...
Q_PROPERTY(QString message READ message NOTIFY messageChanged)
public:
// ...
QString message() const;
// ...
Q_SIGNALS:
void messageChanged();
// ...
private:
QString m_message;
// ...
};
*.h
void mqtt::updateMessage(const QMqttMessage &msg)
{
m_message = msg.payload();
Q_EMIT messageChanged();
}
QString mqtt::message() const{
return m_message;
}
Text {
id: text1
x: 63
y: 68
text: mqttClient.message
font.pixelSize: 12
}