5

QLineEditKeyEvent を送信してchar を追加したい。私は次のようなコードを使用しています:

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ですか?

4

3 に答える 3

6

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);
于 2014-06-20T11:13:00.870 に答える
1

あなたのアプローチは賢明ではありません。

  1. 自分でフォーカスを設定すると、1 つの UI 要素から別の UI 要素へのフォーカスを失い、複数のユーザーを悩ませる可能性があります。
  2. 直接呼び出すkeyPressEventことで、フレームワークからの処理の多くのレイヤーをスキップしています。この道を進むと、不正行為だけが待っています。

に返信するには

QLineEdit に文字を追加したい

行編集テキストを取得し、自由に変更して元に戻すことができます。

QString currentText = ui.myEdit->text();
QString toappend    = "aaaaaaaaaa";
QString nextText    = currentText + toappend;
ui.myEdit->setText(nextText);

または1行

ui.myEdit->setText(ui.myEdit->text()+mystring);
于 2014-06-20T10:28:50.227 に答える
1

行編集に文字を追加するためにキー プレス イベントを合成すると、際限のない問題が発生します。実際に文字を追加していることを確認するには、コントロールの状態を保持する必要があります。カーソルが最後にない場合は、文字を挿入または先頭に追加します。モディファイアがアクティブな場合、クリップボードのショートカットがアクティブ化されたかのようにウィジェットを動作させることができます。たとえば、Ctrl/⌘ を押したまま X を「追加」すると、選択したテキストが行編集から消えます。

言い換えれば、テキストエディットに何かを追加したい場合は、単純に追加し、キーストロークを合成しないでください。

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

それでおしまい。キーストロークを追加して適切に行うには、約 1 ページのコードが必要ですが、それでも Qt の実装の詳細に依存せざるを得ません。

于 2014-06-20T14:20:06.763 に答える