[英]How to change QML TextField text property using key events generated from C++
I have a QML LineEdit like: 我有一个像这样的QML LineEdit:
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)
}
}
I want to change its text property by simulating key events . 我想通过模拟按键事件来更改其text属性。 So I have C++ object (eventHandler) exposed to QML generating key events:
因此,我让暴露给QML的C ++对象(eventHandler)生成了关键事件:
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);
}
}
Now in QML, when I do: 现在在QML中,当我这样做时:
testEdit.forceActiveFocus()
eventHandler.normalKeyPress(testEdit, "4")
eventHandler.normalKeyPress(testEdit, "Enter")
I get the following output: 我得到以下输出:
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 key events are correctly received by the QML LineEdit. 因此,QML LineEdit可以正确接收关键事件。
But why text property is not updated accordingly? 但是为什么text属性没有相应更新?
UPDATE #1: if I use a TextInput
instead of a TextField
, then it works as expected. 更新#1:如果我使用
TextInput
而不是TextField
,那么它将按预期工作。
Well, looking at your code, I think the solution in adding setProperty()
method to your reciever
. 好吧,看看您的代码,我认为将
setProperty()
方法添加到reciever
的解决方案。 So your code will be: 因此,您的代码将是:
void normalKeyPress(QQuickItem *receiver, QString keys)
{
receiver->forceActiveFocus();
receiver->setProperty("text", keys);
<...>
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.