Seite 1 von 1
[gelöst] QTextEdit nur Großbuchstaben zulassen
Verfasst: 7. August 2007 18:05
von junior0007
Hallo,
ich versuche verzweifelt in einem QTextEdit-Feld nur Großbuchstaben zuzulassen.
Code: Alles auswählen
void TextEdit::keyPressEvent ( QKeyEvent * e )
{
// kleines a abfangen
if(e->key() == Qt::Key_A && e->modifiers() == Qt::NoModifier )
{
// neuen Event erzeugen --> Speicherloch???
e = new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::ShiftModifier);
}
// Event weiterreichen
QTextEdit::keyPressEvent(e);
}
Also eigentlich wollte ich alle Kleinbuchstaben abfangen, und die jeweiligen Events durch Events mit Großbuchstaben ersetzen. (Zum Testen läuft das bisher mal nur für a's...) Allerdings glaub ich (so wie ich es mache) ein Speicherloch aufzureißen und ausserdem klappt es einfach nicht

Jedes kleine a wird jetzt konsequent ignoriert...
Kann mir vlt. jemand auf die Sprünge helfen?
Danke
Verfasst: 7. August 2007 23:14
von Burgpflanze
Schau dir mal
QValidator an.
Verfasst: 8. August 2007 08:56
von junior0007
Hi,
Danke, QValidator ist natürlich auch eine nette Idee, aber es löst nicht mein Problem.
Ich möchte fehlerhafte Eingaben (Kleinbuchstaben) durch richtige (GroßBuchstaben) ersetzen. Erkennen kann ich Kleinbuchstaben ja schon, nur ersetzen kann ich sie nicht
Gruß
Junior
Verfasst: 8. August 2007 17:12
von junior0007
Hallo nochmal,
ich hab ein wenig rumprobiert und raus kam das:
Code: Alles auswählen
void TextEdit::keyReleaseEvent ( QKeyEvent * e )
{
// if Shift-Key is NOT pressed and key is character
// of key is ö, ä or ü
if((e->modifiers() == Qt::NoModifier && (e->key() >= 0X41) && (e->key() <= 0x5a))
|| e->key() == 196 || e->key() == 214 || e->key() == 220)
{
QTextCursor dummy = this->textCursor();
dummy.deletePreviousChar();
dummy.insertText(e->text().toUpper());
}
QTextEdit::keyReleaseEvent(e);
}
Funktioniert zwar nur beim langsam schreiben, aber vlt. fällt ja irgendjemanden noch eine bessere Lösung ein...
Gruß
Junior
Verfasst: 22. August 2007 18:41
von phil collins
Hi.
Hab da 'ne schicke Lösung:
Code: Alles auswählen
void keyPressEvent(QKeyEvent* e) {
QString s = e->text();
if(s[0].isPrint()) {
e->accept();
QKeyEvent* e2 = new QKeyEvent(e->type(), e->key(), e->modifiers(),
s.toUpper(), e->isAutoRepeat(), e->count());
QTextEdit::keyPressEvent(e2);
} else
QTextEdit::keyPressEvent(e);
}
Worauf's bei diesem event ankommt, ist gar nicht so sehre der "key()", sonder viel mehr der "text()". Durch den Befehl e->accept() wird - soweit ich weiß - das event als "abgearbeitet" markiert, und ich gehe davon aus, dass es dann später noch automatisch vom heap entfernt wird.
Convert loewr to Upper
Verfasst: 23. August 2007 12:13
von neuschi
Nicht schön, nicht schnell... aber geht:
Code: Alles auswählen
class MyEdit : public QTextEdit
{
public:
MyEdit (QWidget *p=0) : QTextEdit(p)
{
}
void keyPressEvent ( QKeyEvent * event )
{
QString t = event->text();
if (!t.isEmpty())
{
QChar c = t.at(0);
if (c.isLower())
{
insertPlainText(c.toUpper());
return;
}
}
QTextEdit::keyPressEvent(event);
}
};
Verfasst: 3. September 2007 14:44
von junior0007
Sorry war im Urlaub
Supi Lösungen - Danke!