[gelöst] QTextEdit nur Großbuchstaben zulassen

Verschiedenes zu Qt
Antworten
junior0007
Beiträge: 14
Registriert: 7. August 2007 17:55

[gelöst] QTextEdit nur Großbuchstaben zulassen

Beitrag 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
Zuletzt geändert von junior0007 am 3. September 2007 11:23, insgesamt 1-mal geändert.
Burgpflanze
Beiträge: 89
Registriert: 24. Februar 2006 16:41
Wohnort: Dresden

Beitrag von Burgpflanze »

Schau dir mal QValidator an.
Gruß, Peter
junior0007
Beiträge: 14
Registriert: 7. August 2007 17:55

Beitrag 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
junior0007
Beiträge: 14
Registriert: 7. August 2007 17:55

Beitrag 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
phil collins
Beiträge: 19
Registriert: 22. August 2007 17:35

Beitrag 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.
Euer Phil.
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Convert loewr to Upper

Beitrag 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);
	}
};
junior0007
Beiträge: 14
Registriert: 7. August 2007 17:55

Beitrag von junior0007 »

Sorry war im Urlaub ;-)

Supi Lösungen - Danke!
Antworten