我想通过发送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
没有变化?
答案 0 :(得分:4)
您可以通过以下方式更改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);
答案 1 :(得分:0)
你的做法并不明智。
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);
答案 2 :(得分:0)
合成按键事件以将字符附加到行编辑是一个无穷无尽的麻烦。您需要保留控件的状态,以确保您实际上追加字符。如果光标不在末尾,则您将插入或添加字符。如果任何修饰符处于活动状态,则可能会使窗口小部件的行为就像激活剪贴板快捷方式一样。如果你&#34;追加&#34;在按住Ctrl /⌘的同时按下X键,您将导致任何选定的文本从行编辑中消失。
换句话说:如果你想在textedit上附加内容,只需附加它,就不要合成击键。
lineEdit->setText(lineEdit->text() + "appended");
那就是它。要通过附加击键来正确,需要大约一页代码,即使这样,它也不能依赖Qt的实现细节。