[gelöst] QTextEdit/QLineEdit griechische Zeichen eingeben

Alles rund um die Programmierung mit Qt
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

[offtopic]
Nein. Wenn Du ein a tippst, dann kommt ein a ins Editfeld, genauer ein Zeichen mit dem Code 97. Der Font bestimmt nur welches Zeichen an der 97. Stelle ist.
Also bei der 97 muss ich dir Recht geben.... Allerdings wird das Zeichen 97 beim Font Symbols als "alpha" dargestellt.

Ansonsten hast mit deinem Vorgehen recht. Aber... aufpassen wenn man Dateien schreibt ;-)

[/offtopic]
Zuletzt geändert von AuE am 20. November 2008 13:09, insgesamt 1-mal geändert.
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

[offtopic]
nur mal nebenbei: die deutsche sprache ist NICHT case-sensitive...
[/offtopic]
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

KernelPanic hat geschrieben:[offtopic]
nur mal nebenbei: die deutsche sprache ist NICHT case-sensitive...
[/offtopic]
Ist sie sehr wohl. Ansonsten erkläre mir die Bedeutung folgenden Satzes:
der verfolgte floh.
Aber das ist hier wirklich offtopic. Postings, die nur klein geschrieben sind, lese ich meisten gar nicht erst.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
CaptnChaos
Beiträge: 605
Registriert: 28. Juni 2007 15:01
Kontaktdaten:

Beitrag von CaptnChaos »

[offtopic]
@macman
hier hab ich noch einen: ich habe liebe genossen in moskau.

wie oft kommen solche sätze vor?
hat der mensch nicht ein gehirn um aus dem zusammenhang solche sätze interpretieren zu können? kannst du rechtschreibung beim aussprechen sehen? ich denke nicht das du dort zwischen groß- und kleinschreibung unterscheiden kannst. ich finde deine behauptung recht arrogant zumal du selbst nicht fehlerfrei bist. :roll: und arroganz ist in unserer gesellschaft nicht unbedingt ein attribut das gern gesehen wird...
[/offtopic]
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

KernelPanic hat geschrieben:wie oft kommen solche sätze vor?
Darum geht es gar nicht. Weiteres per PN.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Kann man die Einträge bitte löschen? Sowas wollte ich nicht lostreten - ich meinte mit meinem Offtopic eigentlich nur das die Darstellung des Textes so wäre wie er sie möchte. Sicher ist sowohl a als auch "alpha" in dem Fall intern noch immer die 97-es wird halt nur so dargestellt.

Aber scheinbar haben wir Ihn ja schon vertrieben ;-)
sigvdr
Beiträge: 100
Registriert: 1. Juli 2008 19:29

Beitrag von sigvdr »

Hallo, so leicht lasse ich mich nicht vertreiben!!!

Edit:
Diese Zeilen wurden im Code hinzugefügt da die Betonungszeichen nicht auf die
Großbuchstaben gesetzt werden konnten
if ( key == 16777248 ) return;
// Nur Shift Taste wurde gedrückt
Edit:

Ich bin leider nicht früher dazu gekommen, aber dafür kann ich jetzt auch die Lösung am Beispiel eines QLineEdit präsentieren.
Mal sehen was die Forensoftware aus Unicode Inhalten macht! ( sieht ja ganz gut aus)

grlineedit.h

Code: Alles auswählen

#ifndef GRLINEEDIT_H
#define GRLINEEDIT_H
//
#include <QLineEdit>
#include <QKeyEvent>
//
class grLineEdit : public QLineEdit
{
Q_OBJECT
public:
	grLineEdit(QWidget * widget);
	void keyPressEvent ( QKeyEvent * event );
private:
	bool accent;
};
#endif

grlineedit.cpp

Code: Alles auswählen

#include "grlineedit.h"
#include <Qt>
//
// Achtung !! Diese Tabelle / Klasse gilt nicht für das Altgriechische !
// sondern für die moderne griechische Sprache

// wchar_t wird als literal definiert mit dem prefix L also z.B. L'x'
wchar_t charMap[26][5]=
{
{ 'A',L'Α',L'α',L'Ά',L'ά'},
{ 'B',L'Β',L'β',0,0},
{ 'C',L'Ψ',L'ψ',0,0},
{ 'D',L'Δ',L'δ',0,0},
{ 'E',L'Ε',L'ε',L'Έ',L'έ'},
{ 'F',L'Φ',L'φ',0,0},
{ 'G',L'Γ',L'γ',0,0},
{ 'H',L'Η',L'η',L'Ή',L'ή'},
{ 'I',L'Ι',L'ι',L'Ί',L'ί'},
{ 'J',L'Ξ',L'ξ',0,0},
{ 'K',L'Κ',L'κ',0,0},
{ 'L',L'Λ',L'λ',0,0},
{ 'M',L'Μ',L'μ',0,0},
{ 'N',L'Ν',L'ν',0,0},
{ 'O',L'Ο',L'ο',L'Ό',L'ό'},
{ 'P',L'Π',L'π',0,0},
{ 'Q',0,0,0,0},
{ 'R',L'Ρ',L'ρ',0,0},
{ 'S',L'Σ',L'σ',0,0},
{ 'T',L'Τ',L'τ',0,0},
{ 'U',L'Θ',L'θ',0,0},
{ 'V',L'Ω',L'ω',L'Ώ',L'ώ'},
{ 'W',L'Σ',L'ς',0,0},
{ 'X',L'Χ',L'χ',0,0},
{ 'Y',L'Ζ',L'ζ',0,0},
{ 'Z',L'Υ',L'υ',L'Ύ',L'ύ'},
};

grLineEdit::grLineEdit(QWidget * /*widget*/) 
	: QLineEdit()
{
	// Betonungszeichen rücksetzen
	accent = false;
}
//
void grLineEdit::keyPressEvent ( QKeyEvent * event ){
	int key = event->key();
	// im griechischen gibt es ein Betonungszeichen (accent) ' das auf die Vokale gesetzt
	// werden kann
	// dazu zuerst die Taste 'ö' ( ö ~ 214 ) und dann das entsprechende Zeichen tippen.
	// so wird aus 'ö' 'a' ein ά und nicht ein α 
	if ( key == 16777248 ) return;
		// Nur Shift Taste wurde gedrückt
	if ( ( key == 214 ) & (! event->modifiers()) ) {
		// Betonungszeichen setzen
		accent = true;
	} else {
		// nur das Alphabet A - Z  wird umgesetzt 
		// alle anderen Tasten bleiben an der gewohnten Position erhalten
		if ( (key >= Qt::Key_A) & (key <= Qt::Key_Z) ) {
			event->ignore();
			// das wären die 'kleinen' Buchstaben
			int index = 2;
			// und mit Shift natürlich die 'großen'
			if ( event->modifiers() & Qt::ShiftModifier ) index--;
			// nach Bedarf mit Betonungszeichen
			if ( accent ) index +=2;
			// nur Zeichen != 0 werden eingefügt
			if ( wchar_t c = charMap[key-65][index] ) insert(QString(c));
		} else {
			// für alle anderen Zeichen der Tastatur wird der originale 
			// Eventhandler aufgerufen
			QLineEdit::keyPressEvent(event);
		}
		// Betonungszeichen rücksetzen
		accent = false;
	}
}
Gruß Sig
Antworten