Примечание: Я не указал, что этот код не является поточно-ориентированным, я указал, что ваш код в ваш предыдущий вопрос не является поточно-ориентированным, так как вы изменяете GUI из другого потока, чем тот, к которому он принадлежит.
Я указал, что код этого ответа опасен и не рекомендуется, поскольку разработчик не управляет жизненным циклом элементов QML, и механизм QML может устранить их без уведомления нам, поэтому я рекомендую создать QObject для получения или отправки информации между C ++ и QML.
main. cpp
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
class Helper: public QObject{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
QString m_text;
public:
using QObject::QObject;
QString text() const{
return m_text;
}
public slots:
void setText(QString text){
if (m_text == text)
return;
m_text = text;
emit textChanged(m_text);
}
signals:
void textChanged(QString text);
};
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
Helper helper;
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("helper", &helper);
const QUrl url(QStringLiteral("qrc:/main.qml"));
QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
&app, [url](QObject *obj, const QUrl &objUrl) {
if (!obj && url == objUrl)
QCoreApplication::exit(-1);
}, Qt::QueuedConnection);
engine.load(url);
helper.setText("Change you text here...");
return app.exec();
}
#include "main.moc"
main.qml
Text {
id: text1
color: "red"
<b>text: helper.text</b>
font.pixelSize: 12
}
или
Text {
id: text1
color: "red"
text: "This text should change..."
font.pixelSize: 12
}
<b>Connections{
target: helper
onTextChanged: text1.text = text
}</b>