QT QcoreApplication postEvent() поведение

Я написал это простое главное окно QT, только если я передаю аргумент QString в QKeyEvent, он печатает ключ, я ожидаю, что ключ будет напечатан даже без аргумента QString?

раздел 1 в приведенном ниже коде, похоже, не работает (я не получаю ключ, напечатанный в поле QLineEdit; хотя раздел 2 работает и выводится "1"! это нормальное поведение? что происходит с событием, когда оно публикуется первым раздел кода?

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)

{
    ui->setupUi(this);
    this->ui->lineEdit->setFocus();

    Qt::Key key = Qt::Key_1;
    // 1
    QKeyEvent *event = new QKeyEvent (QEvent::KeyPress, key ,Qt::NoModifier); 
    QCoreApplication::postEvent(QWidget::focusWidget(), event); // Does not work! No key is set in the widget
    //
    //2 
    QKeyEvent *event2 = new QKeyEvent(QEvent::KeyPress, key, Qt::NoModifier, QKeySequence(key).toString());
    QCoreApplication::postEvent(QWidget::focusWidget(), event2); // this one works! 

}

1 ответ

Решение

Не все ключевые события имеют текстовое представление (удаление, перемещение курсора, ярлыки, ...). Для тех, у кого есть, QKeyEvent класс хранит его в своем тексте. Вы должны предоставить этот текст, иначе это "безтекстовое" событие.

QLineEdit просто добавит текст, а не выведет его из типа события (как можно увидеть здесь)

Другие вопросы по тегам