【问题标题】:Qt sending keyPressEventQt 发送 keyPressEvent
【发布时间】:2014-08-10 22:27:58
【问题描述】:

我想通过发送 KeyEvent 将字符附加到 QLineEdit。 我正在使用这样的代码:

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没有变化?

【问题讨论】:

    标签: c++ qt keypress key-events qkeyevent


    【解决方案1】:

    您可以通过以下方式更改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);
    

    【讨论】:

    • 谢谢,必须使用第四个参数,像这样:QKeyEvent ev(QKeyEvent::KeyPress, ' ', Qt::NoModifier, 'a');
    • 为什么需要 (QObject*)( ... )(QEvent*)( ... ) 的演员表?
    • 不,这是与 OP 不同的行为。如图所示,setText 总是附加一个字符。 OP 的示例将在 QCursorPos (或其他任何名称)处插入字符。 OP 的插入可以发生在行首、中间或行尾。
    【解决方案2】:

    你的方法不明智。

    1. 自己设置焦点可能会惹恼不止一个用户,他们将焦点从一个 UI 元素转移到另一个。
    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);
    

    【讨论】:

    • 其实我用的是insert方法,但是我想用keyPressEvent。
    【解决方案3】:

    合成一个按键事件以将字符附加到行编辑中会带来无穷无尽的麻烦。您需要保留控件的状态以确保您实际上是在 附加 个字符。如果光标不在末尾,您将插入或前置字符。如果有任何修改器处于活动状态,您可能会导致小部件的行为就像激活了剪贴板快捷方式一样。假设您在按住 Ctrl/⌘ 的同时“追加”一个 X,您将导致任何选定的文本从行编辑中消失。

    换句话说:如果你想在文本编辑器中附加一些东西,只需附加它,不要合成击键。

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

    就是这样。要通过附加击键正确做到这一点,需要大约一页代码,即便如此,它也不得不依赖 Qt 的实现细节。

    【讨论】:

      猜你喜欢
      • 2017-02-14
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多