QMLオブジェクトとやり取りするQt C++コードを記述しようとしています。目標は、GUIのテキストログに追加されたTCPソケット上の文字列を受け取ることです。新しい文字列を受け取るたびにappendText()関数を実行します。 QWidgetsと.uiファイルを使用している現在、この実装の実装が1つあります。私は同一のQML実装を持つ必要があります。私のQWidgetの実装では、textBrowserと次のようなappend関数を使用します。 "theString"はプログラムの実行中に変更され、各変更が追加され、テキストログがいっぱいになります。QML textAreaが追加されないのはなぜですか?
//update the text log with data received on TCP socket
void MainWindow::appendText() {
ui->textBrowser->append(theString);
}
これにより、希望の結果が得られ、各文字列が入力時にテキストボックスに追加されます。出力は次のようになります。
Control connection successful.
Data connection successful.
Control Packet Receieved:
1
Control Packet Receieved:
2
Control Packet Receieved:
3
Control Packet Receieved:
4
Control Packet Receieved:
1
Control Packet Receieved:
2
Control Packet Receieved:
3
Control Packet Receieved:
4
...私は次のコードでQMLのオブジェクトと同じ関数であると信じるもの
//update the text log with data received on TCP socket
void MainWindow::appendText() {
QMetaObject::invokeMethod(textbox, "append", Qt::DirectConnection, Q_ARG(QVariant, theString));
//QQmlProperty(textbox, "text").write(theString);
}
を行う場合しかし、それは唯一の最初の2つの文字列を付加していない、そしてそれを超え、それ以上。出力は代わりにこのようになります。
Control connection successful.
Data connection successful.
C++のQMLメソッドを広範囲に呼び出すためのドキュメントを見てきましたが、まだ運がなかったのです。どんな助けもありがとうございます。御時間ありがとうございます。
感謝。私はQStringのを使用して修正をしようとすると、私はこのエラーが表示されます。 QMetaObject ::は、invokeMethod:いいえ、そのような方法TextArea_QMLTYPE_31 ::アペンド(QStringの) 候補者は次のとおりです。 APPEND(QVariant)... 私は、最初の2つのかなり確信しています私が持っているのappendText()関数は、私が実際にGUIには何を書くだけであるため、メッセージは、他の方法で印刷されません。その間に信号ベースのアプローチを試みます。あなたは – 9tm09
使用しているのQt/QMLバージョン?あなたは 'TextArea'を使っていますか? C++で 'textbox'をどうやって取得しますか? 'MainWindow :: appendText'が正しく呼び出されていますか? – m7913d
私はQtのCreatorを4.2.1を使用しています。 QMLファイルでTextAreaオブジェクトを使用しています。 TextAreaオブジェクトはgroupBoxオブジェクトの子オブジェクトです。テキストボックス= groupBox2-> findChild( "networkStatus"); ..... また、QMetaObjectを使用しています:invokeMethod、TextAreaオブジェクトにappendというメソッドがあります。 –
9tm09