C++ 将QML标签文本从C++;功能

C++ 将QML标签文本从C++;功能,c++,qt,qml,c++17,C++,Qt,Qml,C++17,我在QML中有一个标签,我想在单击按钮时更改其文本值。我尝试了许多不同的方法来实现这一点,但似乎没有什么能正常工作。我使用了QObject::setProperty(),当我使用qDebug()打印新的文本值时,它似乎可以工作,但它不会在GUI上刷新。我做错了什么 main.cpp: #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #inclu

我在QML中有一个标签,我想在单击按钮时更改其文本值。我尝试了许多不同的方法来实现这一点,但似乎没有什么能正常工作。我使用了QObject::setProperty(),当我使用qDebug()打印新的文本值时,它似乎可以工作,但它不会在GUI上刷新。我做错了什么

main.cpp:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QSettings>
#include <QQuickStyle>
#include <QtQuickControls2>
#include <QQmlContext>
#include <QIcon>

#include "Controllers/Network/network.hpp"
#include "Controllers/NFC/nfc.hpp"

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QIcon::setThemeName("gallery");
    QQuickStyle::setStyle("Material");

    // Property bindings:
    qmlRegisterType<RFS::Communication::Network>("rfs.communication.network", 1, 0, "Network");
    qmlRegisterType<RFS::Communication::NFC>("rfs.communication.nfc", 1, 0, "NFC");

    QQmlApplicationEngine engine;
    engine.rootContext()->setContextProperty("availableStyles", QQuickStyle::availableStyles());
    engine.load(QUrl("qrc:/main.qml"));
    if (engine.rootObjects().isEmpty()) return -1;
    return app.exec();
}

Backend backend;
engine.rootContext()->setContextProperty("backend", &backend);

有没有更好的方法来实现这一点?非常感谢大家,

< p>任何人都在寻找一个简单的解决方案,我只是想通过在QML

中按下一个按钮来实现C++边上的标签文本的改变。 添加到main.cpp:

Backend backend;
engine.rootContext()->setContextProperty("backend", &backend);
创建一个新类(backend.h和backend.cpp)

在backend.h中:

#ifndef CONTROLLERS_H
#define CONTROLLERS_H

#include <Qt>
#include <QObject>
#include <QCoreApplication>
#include <QWindow>
#include <QString>
    class Backend : public QObject
{
    Q_OBJECT
public:
    explicit Backend(QObject *parent = nullptr);
   
public slots:
    void setText();
    QString getText();
};
#endif // CONTROLLERS_H
在QML中:

Label{
    id: myLabel
}

Button{ 
    id: myButton
    onClicked:{
        backend.setText()
        myLabel.text = backend.getText()
    }
}

嗯,我认为你的方法是错误的,而且你有XY问题。类、变量等的名称。我直觉地告诉您,您希望根据NFC对象的信息更新标签。我说得对吗?QMLN不从C++访问QML,但反过来,暴露文本asqyFalth.@ EyLLANESC。目标是基于NFC对象的信息更新标签,是的。但目前我只想从C++函数手动更新标签,而不需要与NFC交互。main.qml中没有与此问题相关的信息,它只包含一些样式块。@FrankOsterfeld我曾尝试使用Q_属性,但它没有专门帮助我解决此问题。目标是用NFC标签替换按钮,这将触发C++功能,然后更新标签文本。
#ifndef CONTROLLERS_H
#define CONTROLLERS_H

#include <Qt>
#include <QObject>
#include <QCoreApplication>
#include <QWindow>
#include <QString>
    class Backend : public QObject
{
    Q_OBJECT
public:
    explicit Backend(QObject *parent = nullptr);
   
public slots:
    void setText();
    QString getText();
};
#endif // CONTROLLERS_H
#include "backend.h"

QString text = ""; // don't forget this
Backend::Backend(QObject *parent) : QObject(parent)
{

}

QString Backend::getText()
{
    return text; //returns the text you set or didnt in setText()
}

void Backend::setText()
{
    text = "text"; // or do anything you want with global QString text
}
Label{
    id: myLabel
}

Button{ 
    id: myButton
    onClicked:{
        backend.setText()
        myLabel.text = backend.getText()
    }
}