Несколько вещей:
Для отправки события в mainWindow
требуется mainWindow
, чтобы обработать передачу события в объект QLineEdit
, не видя остальной части кода, который я могуне говорите, если это делается или нет;альтернатива - отправка непосредственно на QLineEdit
следующим образом:
QApplication::sendEvent(lineEdit, &event);
Для конструктора QKeyEvent
также требуется четвертый параметр - строкадля отправки в данном случае "a"
.
QKeyEvent event(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier);
должно быть
QKeyEvent event(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "a");
для отправки "a"
.
В зависимости от конкретной реализации вам также может потребоваться отправить QEvent::KeyRelease
после QEvent::KeyPress
, то есть
QKeyEvent event1(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "b");
QKeyEvent event2(QEvent::KeyRelease, Qt::Key_A, Qt::NoModifier);
QApplication::sendEvent(edit, &event1);
QApplication::sendEvent(edit, &event2);
Как указывает (2), перечисление ключей (то есть Qt::Key_A
) не отправляет "a"
, как вы ожидаете, вместо этого отправляемая строка определяется четвертым параметром в конструкторе QKeyEvent
, т.е.1047 *
QKeyEvent event(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "a");
QApplication::sendEvent(lineEdit, &event);
Эквивалентно
QKeyEvent event(QEvent::KeyPress, Qt::Key_B, Qt::NoModifier, "a");
QApplication::sendEvent(lineEdit, &event);
Использование QKeyEvent
таким образом, вероятно, приведет к некоторой неприятности при обработке возврата и удаления.Вероятно, более элегантно просто добавить нужный символ в текст QLineEdit
,
lineEdit->setText(lineEdit->text().append("a"));
и использовать QLineEdit::backspace()
и QLineEdit::delete()
для обработки клавиш backspace
и delete
.
Пример
#include <QtWidgets/QApplication>
#include <qwidget.h>
#include <qmainwindow.h>
#include <qlineedit.h>
#include <qboxlayout.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow* main = new QMainWindow;
QWidget* central = new QWidget();
QBoxLayout* layout = new QBoxLayout(QBoxLayout::LeftToRight);
central->setLayout(layout);
QLineEdit* edit = new QLineEdit(central);
edit->setAlignment(Qt::AlignCenter);
layout->addWidget(edit);
edit->setText("sometext");
edit->backspace();
edit->setText(edit->text().append("a"));
main->setCentralWidget(central);
main->resize(600, 400);
main->show();
return a.exec();
}