如何在C++中传递来自QString的TextField文本?

Cés*_*sto 1 c++ qt qml

大家好,我需要把TextField QML文本传递给C++中的QString.

Firstpage.qml:

Component {

    id: mainView

    Row {

        Image {
            id: logo
            anchors.fill: parent
            source: "Imagens/jscalcadosLogo.png"
        }

        ColumnLayout {
            id: layoutLogin
            anchors.centerIn: parent
            anchors.margins: 3
            spacing: 3

            TextField {
                id: login
                objectName: "login"
                Layout.fillWidth: true
                placeholderText: "Username"

            }
Run Code Online (Sandbox Code Playgroud)

Main.cpp的:

int main(int argc, char *argv[]){

QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

QQuickView *view = new QQuickView;
view->setSource(QUrl::fromLocalFile("FirstPage.qml"));
QObject *object = view->rootObject();
QObject    *textin = object->findChild<QObject*>("login");
//QString input = textin->Property("text").toString(); // crash the program

return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试将Textin转换为QString时程序崩溃

任何的想法 ?我很抱歉我的英语不好.

der*_*erM 5

一般规则是:不要从C++中读取或写入QML中的内容

相反,您应该QObject在C++中创建一个具有该文本属性的衍生实例.您可以将其公开QObject为QML,方法是将其设置为上下文属性或将其注册为单例.

然后在QML中设置上述属性 - et voila - 您已将文本从QML世界推送到C++.

关于C++和QML的交互,StackOverflow上有各种各样的问题(我可能会在以后搜索它们,并且可能会将您的问题标记为重复,因为我确定您的问题不是第一个).

此外,文档还有更多相关信息.