Qt отправка keyPressEvent

Я хочу добавить символы к 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?

3

Решение

Вы можете изменить текст изменения 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);
4

Другие решения

Ваш подход не мудрый.

  1. Установка фокуса самостоятельно может раздражать более одного пользователя, который теряет фокус от одного элемента пользовательского интерфейса для другого.
  2. По телефону 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);
0

Синтезирование события нажатия клавиши для добавления символов к редактированию строки требует бесконечных проблем. Вам нужно сохранить состояние контроля, чтобы убедиться, что вы на самом деле добавление персонажи. Если курсор находится не в конце, вы будете вставлять или добавлять символы. Если какие-либо модификаторы активны, вы можете заставить виджет работать так, как если бы, скажем, был активирован ярлык буфера обмена. Скажем, если вы «добавляете» X, удерживая нажатой клавишу Ctrl / ⌘, любой выделенный текст исчезнет из строки редактирования.

Другими словами: если вы хотите добавить что-то к текстовому сообщению, просто добавьте его, не синтезируйте нажатия клавиш.

lineEdit->setText(lineEdit->text() + "appended");

Вот и все. Сделать это должным образом с помощью добавления нажатий клавиш требуется около страницы кода, и даже тогда он не может не полагаться на детали реализации Qt.

0
По вопросам рекламы [email protected]