から生成されたキーイベントを使用してQMLのTextFieldのテキストプロパティを変更するには私のようなQMLのLINEEDITを持っています。私が行うとき、QMLで今はどのようにC++
void normalKeyPress(QQuickItem *receiver, QString keys)
{
receiver->forceActiveFocus();
QKeySequence keysSeq = QKeySequence(keys);
for (auto idx = 0; idx < keysSeq.count(); ++idx)
{
auto keyCode = keysSeq[idx];
auto keyEvent = new QKeyEvent(QEvent::KeyPress, keyCode, Qt::NoModifier);
auto keyEventSent = QApplication::sendEvent(receiver, keyEvent);
keyEvent = new QKeyEvent(QEvent::KeyRelease, keyCode, Qt::NoModifier);
keyEventSent = QApplication::sendEvent(receiver, keyEvent);
}
}
:だから私は、C++オブジェクト(EventHandlerは)キーイベントを発生させるQMLにさらされてい
testEdit.forceActiveFocus()
eventHandler.normalKeyPress(testEdit, "4")
eventHandler.normalKeyPress(testEdit, "Enter")
私は、取得するには、次の出力:
qml: Press = 52
qml: Current text is 0
qml: Release = 52
qml: Current text is 0
qml: Press = 16777221
qml: Current text is 0
qml: Release = 16777221
qml: Current text is 0
したがって、キーイベントはQML LineEditによって正しく受信されます。
なぜテキストプロパティがそれに応じて更新されないのですか?
UPDATE#1:私は代わりにTextField
のTextInput
を使用する場合に予想されるよう、それは動作します。
LineEditを自分で作成しましたか?私はQtのWebサイトでドキュメントを見つけることができません。 –
@JeffreyvandeGlind:oups、間違ったコピー貼り付け編集。 TextFieldを使用すると、同じ結果が得られます。私は私の質問を編集しました。ニースキャッチ、ありがとう! – Korchkidu
'TextField'はアクティブなフォーカスを持っていますか? 'forceActiveFocus'を呼び出すか、少なくとも' focus'を 'true'に設定してください。 – GrecKo