嗨,大家好,我需要使用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"
}
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();
}
当我尝试将Textin转换为QString时程序崩溃
任何想法?我很抱歉我的英语不好。
答案 0 :(得分:5)
一般规则是:不要用C ++读取或写入QML
相反,您应该在C ++中创建一个QObject
派生的实例,该实例具有该文本的属性。您可以将QObject
公开给QML,方法是将其设置为上下文属性或将其注册为单例。
然后在QML中你设置了前面提到的属性 - 瞧瞧 - 你已经把文本从QML世界推到了C ++。
关于C ++和QML的交互,StackOverflow上有各种各样的问题(我可能会在以后搜索它们,并且可能会将您的问题标记为重复,因为我确定您的问题不是第一个问题。)
documentation还有更多相关信息。