Я хочу добавить символы к QLineEdit
отправив KeyEvent.
Я использую такой код:
ui.myEdit->setFocus();
for(size_t i = 0; i < 10; ++i) {
QKeyEvent keyPressed(QKeyEvent::KeyPress, 'a', Qt::NoModifier);
QWidget::keyPressEvent(&keyPressed); // or
//QApplication::sendEvent(QApplication::focusWidget(), &keyPressed);
}
Почему нет изменений в myEdit
?
Вы можете изменить текст изменения QLineEdit
просто:
ui->myEdit->setText(ui->myEdit->text().append("a"));
Но если вы действительно хотите изменить его, отправив QKeyEvent
Вы можете попробовать это:
QKeyEvent * eve1 = new QKeyEvent (QEvent::KeyPress,Qt::Key_A,Qt::NoModifier,"a");
QKeyEvent * eve2 = new QKeyEvent (QEvent::KeyRelease,Qt::Key_A,Qt::NoModifier,"a");
qApp->postEvent((QObject*)ui->myEdit,(QEvent *)eve1);
qApp->postEvent((QObject*)ui->myEdit,(QEvent *)eve2);
Ваш подход не мудрый.
keyPressEvent
непосредственно вы пропускаете много слоев обработки из фреймворка. На этом пути ждут только плохое поведение.Ответить на
Я хочу добавить символы в QLineEdit
Вы можете получить строку редактирования текста, изменить по своему желанию и установить его обратно.
QString currentText = ui.myEdit->text();
QString toappend = "aaaaaaaaaa";
QString nextText = currentText + toappend;
ui.myEdit->setText(nextText);
или одна строка
ui.myEdit->setText(ui.myEdit->text()+mystring);
Синтезирование события нажатия клавиши для добавления символов к редактированию строки требует бесконечных проблем. Вам нужно сохранить состояние контроля, чтобы убедиться, что вы на самом деле добавление персонажи. Если курсор находится не в конце, вы будете вставлять или добавлять символы. Если какие-либо модификаторы активны, вы можете заставить виджет работать так, как если бы, скажем, был активирован ярлык буфера обмена. Скажем, если вы «добавляете» X, удерживая нажатой клавишу Ctrl / ⌘, любой выделенный текст исчезнет из строки редактирования.
Другими словами: если вы хотите добавить что-то к текстовому сообщению, просто добавьте его, не синтезируйте нажатия клавиш.
lineEdit->setText(lineEdit->text() + "appended");
Вот и все. Сделать это должным образом с помощью добавления нажатий клавиш требуется около страницы кода, и даже тогда он не может не полагаться на детали реализации Qt.