Ich habe wie einen QML LineEdit erzeugt ändern:Wie QML TextField- Texteigenschaft mit Schlüsselereignissen von C++
TextField
{
id: testEdit
text: "0"
Keys.onPressed:
{
console.log("Press = " + event.key)
console.log("Current text is " + text)
}
Keys.onReleased:
{
console.log("Release = " + event.key)
console.log("Current text is " + text)
}
}
Ich mag seine Texteigenschaft durch die Simulation von Tastenereignis ändern. So habe ich C++ Objekt (Eventhandler) auf QML ausgesetzt Erzeugung Schlüsselereignisse:
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);
}
}
Jetzt in QML, wenn ich das tue:
testEdit.forceActiveFocus()
eventHandler.normalKeyPress(testEdit, "4")
eventHandler.normalKeyPress(testEdit, "Enter")
ich die folgende Ausgabe:
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
So werden wichtige Ereignisse vom QML LineEdit korrekt empfangen.
Aber warum Text Eigenschaft wird nicht entsprechend aktualisiert?
UPDATE # 1: wenn ich einen TextInput
anstelle eines TextField
verwenden, dann funktioniert es wie erwartet.
Haben Sie LineEdit selbst erstellt? Ich kann die Dokumentation auf der Qt-Website nicht finden. –
@ JeffreyvandeGlind: oups, falsche copy-paste-edit. Mit einem TextField erhalten Sie die gleichen Ergebnisse. Ich habe meine Frage bearbeitet. Netter Fang, danke! – Korchkidu
Hat das 'TextField' aktiven Fokus? Rufen Sie 'forceActiveFocus' auf oder setzen Sie' focus' auf 'true'. – GrecKo