2017-10-19 13 views
1

こんにちは、私はTextField QMLのテキストを取ってから、C++でQStringに渡す必要があります。C++でQStringからTextFieldテキストを渡す方法は?

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(); 
} 

私は、プログラムがクラッシュ

任意のアイデアをQStringのにTextinを変換しようとすると?私は悪い英語のために申し訳ありません。

答えて

5

一般的なルールは次のとおりです。代わりに、あなたはそのテキストのプロパティを持つC++でQObject由来のインスタンスを作成しなければならC++

からQMLで何かを読んだり、書いてはいけません。コンテクストプロパティとして設定するか、シングルトンとして登録するかのどちらかで、QObjectをQMLに公開します。

QMLで、上記のプロパティを設定すると、QMLの世界からC++にテキストをプッシュしました。

C++とQMLのやりとりに関するStackOverflowにはさまざまな質問があります(私は後でそれらを検索するかもしれませんし、あなたの質問が重複していると思われるかもしれません。

また、documentationにはこれに関する情報があります。

+0

"一般的なルールは:C++からQMLで何かを読み書きしないでください"ですが、私はQ ++アプリケーションに接続するためにC++でMysqlを使用しようとしているので、この接続を使用する必要があります。私はこのQObjectをQStringに渡す必要があります。 –

+1

@CésarAugustoQObjectから継承するクラスを作成します。ここでは、必要なプロシージャを実行するメソッドがあり、データベースと対話し、コンテキストプロパティまたはシングルトンを使用してQMLに公開し、そのタスクをQMLで使用します。 C++側で実装されているコードを実行する側です。 – eyllanesc

関連する問題