Seite 1 von 1
[gelöst] QTextEdit keyPressEvent
Verfasst: 21. März 2011 08:56
von whit3
Hallo ich benutze QT 3.3.6 und VisualStudio 2002.
Mir steht momentan nichts Anderes zur Auswahl.
Mein Problem ist, dass ich im
KeyPressEvent verschiedene Tasten abfangen muss. Zuerst hab ich es versuch über
KeyReleaseEvent zu realisieren, aber dies ist nicht ausreichend. ICh habe versucht den den ursprünglichen Code in die überschriebene Methode einzufügen, um diesen dann abzuändern. Jedoch spuckt der Compiler mir dann eine Menge Fehler aus.
Wie z.B.:
Code: Alles auswählen
error C2027: Verwendung des undefinierten Typs "QTextCursor"
error C2027: Verwendung des undefinierten Typs "QTextDocument"
error C2027: Verwendung des undefinierten Typs "QTextParagraph"
error C2027: Verwendung des undefinierten Typs "QTimer"
Welche Alternative Lösungen gibt es das KeyPressEvent zu modfizieren ?
Verfasst: 21. März 2011 09:02
von Christian81
Wenn der Compiler die Klassen nicht kennt sollte man die Header einbinden in denen die Klassen definiert sind, oder? --> C++ Grundlagen
Verfasst: 21. März 2011 09:08
von whit3
Christian81 hat geschrieben:Wenn der Compiler die Klassen nicht kennt sollte man die Header einbinden in denen die Klassen definiert sind, oder? --> C++ Grundlagen
Das habe ich gemacht...
weiterführend meckert er auch :
Code: Alles auswählen
error C2027: Verwendung des undefinierten Typs "QTextCursor" c:\Programme\Qt\3.3.6\include\qtextedit.h(56) : Siehe Deklaration von 'QTextCursor'
Verfasst: 21. März 2011 09:36
von Christian81
Qt3 ? Wieso das denn?
Wenn er QTextCursor nicht findet dann ist der Header in dem QTextCursor definiert ist nicht eingebunden. Habe ich aber schon vorhin gesagt...
Verfasst: 21. März 2011 09:37
von whit3
Christian81 hat geschrieben:Qt3 ? Wieso das denn?
Wenn er QTextCursor nicht findet dann ist der Header in dem QTextCursor definiert ist nicht eingebunden. Habe ich aber schon vorhin gesagt...
weil keine andere Lizenz vorhanden ist...
doch er ist eingebunden ...
Re: QTextEdit keyPressEvent
Verfasst: 21. März 2011 10:10
von franzf
whit3 hat geschrieben:ICh habe versucht den den ursprünglichen Code in die überschriebene Methode einzufügen, um diesen dann abzuändern.
Du hast aus den Qt-Sourcen den Code abkopiert und in deine Klasse eingefügt? Das macht man nicht!!! Rein aus OOP-Sicht ist das schlimmster Unfug!
QTimer wundert mich, aber die anderen Klassen stehen laut
Qt-Klassenübersicht nicht zur Verfügung - wahrscheinlich nur intern verwendete Klassen.
Und die
Doku sagt auch ein wenig dazu, auch ein Beispiel ist verlinkt.
Re: QTextEdit keyPressEvent
Verfasst: 21. März 2011 13:10
von whit3
franzf hat geschrieben:whit3 hat geschrieben:ICh habe versucht den den ursprünglichen Code in die überschriebene Methode einzufügen, um diesen dann abzuändern.
Du hast aus den Qt-Sourcen den Code abkopiert und in deine Klasse eingefügt? Das macht man nicht!!! Rein aus OOP-Sicht ist das schlimmster Unfug!
QTimer wundert mich, aber die anderen Klassen stehen laut
Qt-Klassenübersicht nicht zur Verfügung - wahrscheinlich nur intern verwendete Klassen.
Und die
Doku sagt auch ein wenig dazu, auch ein Beispiel ist verlinkt.
Da hast du wohl Recht, dass das grober Unfug ist...
aber ein Lösungsansatz wäre auch nicht verkehrt gewesen...
Ich habe keine Ahnung wie ich das
keyPressEvent sonst erweitern soll..

Re: QTextEdit keyPressEvent
Verfasst: 21. März 2011 13:21
von franzf
whit3 hat geschrieben:aber ein Lösungsansatz wäre auch nicht verkehrt gewesen...
Ich habe keine Ahnung wie ich das
keyPressEvent sonst erweitern soll..

Lösungsansatz findest du doch im Link von mir:
Code: Alles auswählen
void PictureDisplay::keyPressEvent( QKeyEvent *k )
{
switch ( tolower(k->ascii()) ) {
case 'r': // reload
pict->load( name );
update();
break;
case 'q': // quit
QApplication::exit();
break;
}
}
PictureDisplay erbt von QWidget.
Wenn du jetzt erreichen willst, dass auch noch von der Basisklasse das keyPressEvent() aufgerufen wird, dann musst du das selber machen. Und das hat mit Qt nix mehr zu tun, sondern ist reines C++:
Code: Alles auswählen
void PictureDisplay::keyPressEvent( QKeyEvent *k )
{
switch ( tolower(k->ascii()) ) {
case 'r': // reload
pict->load( name );
update();
break;
case 'q': // quit
QApplication::exit();
break;
}
QWidget::keyPressEvent(k);
}
Wenn nicht in jedem Fall, sondern nur in dem Fall, in dem du keine eigene Funktion anbieten willst, die Funktion der Basisklasse aufrufen willst, machst du das halt im "default:" des switch.
Beachte, dass du immer die Methode der direkten Basisklasse aufrufst!
Verfasst: 21. März 2011 14:30
von whit3