Seite 1 von 1

QKeyEvent's senden an QTextEdit

Verfasst: 28. Februar 2014 14:20
von samir_bmw
Hallo Zusammen,
ich versuche verschiedene Tastenmuster in eine liste mit QKeyEvent zu erzeugen und die an QTextEdit zu senden. Hier ist ein Beipiel:

Code: Alles auswählen

QKeyEvent *keyEventPress = new QKeyEvent(QEvent::KeyPress, Qt::Key_X, Qt::NoModifier);
QKeyEvent *keyEventRelease = new QKeyEvent(QEvent::KeyPress, Qt::Key_X, Qt::NoModifier);

QApplication::sendEvent(myTextEdit, keyEventPress);
QApplication::sendEvent(myTextEdit, keyEventRelease);
Leider es wird im Editor (myTextEdit) nichts dargestellt. myTextEdit erbt von QTextEdit. Dann habe ich die Methoden keyPressEvent und keyReleaseEvent neu implementiert und die sehen so aus:

Code: Alles auswählen

void myTextEdit::keyPressEvent(QKeyEvent *e) {
  qDebug() << "KP: " << e->key() << " - " << e->nativeScanCode();
}
void myTextEdit::keyReleaseEvent(QKeyEvent *e) {
  qDebug() << "KR: " << e->key() << " - " << e->nativeScanCode();
}
Die Ausgabe sieht so aus:
KP: 88 - 0
KR: 88 - 0

Die QKeyEvent's sind angekommen, leider aus irgendwelchen Grund werden die nicht im Editor dargestellt.
Befor ich hier geschrieben habe, habe ich schon gegoogelt und könnte nicht mein Problem lösen. Deswegen wäre ich sehr Dakbar für konkrete Antworten und nicht "Hast du schon gegoogelt.".

Re: QKeyEvent's senden an QTextEdit

Verfasst: 1. März 2014 11:02
von odt
Tief im QLineEdit steht:

Code: Alles auswählen

void QWidgetLineControl::processKeyEvent(QKeyEvent* event){
     ...
     if (unknown && !isReadOnly()) {
        QString t = event->text();
        if (!t.isEmpty() && t.at(0).isPrint()) {
            insert(t);
daher den Text vom KeyEvent setzen:

Code: Alles auswählen

	QKeyEvent event( QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, tr( "naja" ) );
	QApplication::sendEvent( ui->lineEdit, &event );

Re: QKeyEvent's senden an QTextEdit

Verfasst: 7. März 2014 09:06
von samir_bmw
Ich könnte es erst heute Morgen testen. Vielen Dank, es funktioniert.
Damit ich es so anwenden kann, muss ich Tabelle mit Key --> String bauen. Es ist umständlich und die Qt-Leute haben es schon bestimmt implementiert und "vermutlich" besser als ich. (100% besser) :D
Ich muss nur herausfinden wo genau im sorce code und wie, nachdem eine Taste gedruckt wird (interupt augelöst wird), das QKeyEvent erzeugt wird. Dafür habe ich schon im sorce code nachgeschaut, leider leider könnte ich die Stelle nicht finden. Ich habe es auch mit dem Debuger versucht und da habe ich gescheitert.

Ich warte ungeduldig auf einen Vorschlag.