wizualizacja danych sensoryjnych


Aplikacja po polsku
Bogdan Kreczmer
ZPCiR ICT PWr
pokój 307 budynek C3
kreczmer@ict.pwr.wroc.pl
Copyright ©2004 Bogdan Kreczmer
Niniejszy dokument zawiera materiały do wykładu na temat wizualizacji danych sensorycznych. Jest on udostępiony
pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości,
razem z ninijeszą stroną tytułową.
Kodowanie znaków narodowych
int main( int argc, char "" argv )
{
QApplication a( argc, argv );
QTextCodec "wKodowanieLatin2 = QTextCodec::codecForName( ISO 8859-2 );
if (wKodowanieLatin2) {
QTextCodec::setCodecForTr(wKodowanieLatin2);
} else cerr <<  !!! Brak kodowania: ISO 8859-2 << endl;
QFont CzcionkaAplikacji(QApplication::font()); //Przekopiowujemy dotychczasowe ustawienia czcionki. . . . . . . . . . . . .
CzcionkaAplikacji.setFamily(  Fixed [Misc] );
CzcionkaAplikacji.setPointSize( 12 );
QApplication::setFont(CzcionkaAplikacji);
QMessageBox Info(NULL);
Info.about(NULL,QObject::tr( Informacja z tłumaczeniem ),
QObject::tr( Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ ));
Info.about(NULL,QObject::tr( Informacja ze zwykłym łańcuchem znaków ),
 Ale bajzel!!!\n Co z tymi znakami??!!\n
 Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ );
return 0;
}
Ustalenia kodowania znaków umożliwia klasa QtTextCodec. Pozwala ona na ustalenie kodowanie dla napisów pod-
legających tłumaczeniu. Jednak aby polskie znaki diakrytyczne były widoczne konieczne jest wybranie odpowiedniej
czcionki, w której znaki te są zdefiniowane.
1
Kodowanie znaków narodowych
int main( int argc, char "" argv )
{
QApplication a( argc, argv );
QTextCodec "wKodowanieLatin2 = QTextCodec::codecForName( ISO 8859-2 );
if (wKodowanieLatin2) {
QTextCodec::setCodecForTr(wKodowanieLatin2);
QTextCodec::setCodecForCStrings(wKodowanieLatin2);
} else cerr <<  !!! Brak kodowania: ISO 8859-2 << endl;
QFont CzcionkaAplikacji(QApplication::font());
CzcionkaAplikacji.setFamily(  Fixed [Misc] );
CzcionkaAplikacji.setPointSize( 12 );
QApplication::setFont(CzcionkaAplikacji);
QMessageBox Info(NULL);
Info.about(NULL,QObject::tr( Informacja z tłumaczeniem ),
QObject::tr( Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ ));
Info.about(NULL,QObject::tr( Informacja ze zwykłym łańcuchem znaków ),
 Teraz jest już dobrze.\n
 Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ );
return 0;
}
Kodowanie można ustalić niezależnie dla napisów podlegających tłumaczeniu oraz łańcuchów znaków, które podlegają
konwersji do obiektów klasy QString.
2
Kodowanie znaków narodowych
int main( int argc, char "" argv )
{
QApplication a( argc, argv );
QTextCodec "wKodowanieLatin2 = QTextCodec::codecForName( ISO 8859-2 );
if (wKodowanieLatin2) {
QTextCodec::setCodecForTr(wKodowanieLatin2);
QTextCodec::setCodecForCStrings(wKodowanieLatin2);
} else cerr <<  !!! Brak kodowania: ISO 8859-2 << endl;
QMessageBox Info(NULL);
Info.about(NULL,QObject::tr( Informacja z tłumaczeniem ),
QObject::tr( Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ ));
Info.about(NULL,QObject::tr( Informacja ze zwykłym łańcuchem znaków ),
 Teraz jest już dobrze.\n
 Polskie znaki diakrytyczne:\n ąęćłńóśzżĆACÓŚyŻ );
return 0;
}
Linia wywołania programu:
rab 34: ./skromny_edytor -fn  -b&h-lucida-bold-i-normal-sans-18-180-75-75-p-119-iso8859-2
Rodzaj czcionki dla aplikacji można również ustawić z linii polecenia. W tym celu wykorzystuje się standardowe opcje
jakie każda aplikacja pracująca w środowisku X Window powinna umieć zinterpretować.
3
Ustawianie czcionki aplikacji
bool JestParametr(int argc, char const " const " argv, const char "Param)
{
for (int i = 0; i < argc; i++) if (!strcmp(Param,argv[ i ])) return true;
return false;
}
int main( int argc, char "" argv )
{
bool JestParametrCzcionki = JestParametr(argc,argv, -fn );
QApplication Aplik( argc, argv );
. . .
if ( ! JestParametrCzcionki ) {
QFont CzcionkaAplikacji(QApplication::font());
CzcionkaAplikacji.setFamily(  Fixed [Misc] );
CzcionkaAplikacji.setPointSize( 12 );
QApplication::setFont(CzcionkaAplikacji);
}
. . .
}
Aplikacja musi pracować poprawnie, jeżeli użytkownik wywoła ją bez parametrów ustawiających czcionki. Musi ona
zatem ustawiać swoje czcionki, tak aby ustawienia z linii polecenia mogły je zmodyfikować.
4
Obsługiwane opcje wywołania
Opcje debugowania  dostępne jeśliQtzostało skompilowane ze zdefiniowanym
symbolemQT_NO_DEBUG:
-nograb,-dograb(tylko dlaX11),-sync(tylko dlaX11).
OpcjeQt są one rozpoznawane przez każdy program pisany z wykorzy-
staniem bibliotekiQt:
-style,-session,-widgetcount.
OpcjeX11 tradycyjne opcje systemuX Window:
-display,-geometry,-fn,-bg,-fg,-btn,-name,-title,
-visual,-ncols,-cmap
Przykład wywołania aplikacji:
aplikacja -display rab:0 -geometry 600x480+10+20
5
Kodowanie znaków diakrytycznych
int main( int argc, char "" argv )
{
bool JestParametrCzcionki = JestParametr(argc,argv, -fn );
QApplication Aplik( argc, argv );
QTextCodec "wKodowanieLatin2 = QTextCodec::codecForName( ISO 8859-2 );
if (wKodowanieLatin2) {
QTextCodec::setCodecForTr(wKodowanieLatin2);
} else cerr <<  !!! Brak kodowania: ISO 8859-2 << endl;
. . .
SkromnyEdytor SEr;
SEr.show();
Aplik.connect( &Aplik, SIGNAL( lastWindowClosed() ), &Aplik, SLOT( quit() ) );
wWinieta >finish(&SEr);
delete wWinieta;
SEr. wEdytor >insert(wKodowanieLatin2 >toUnicode( Polskie znaki diakrytyczne:\n ąćęłńóśzżĆACÓŚyŻ ));
return Aplik.exec();
}
Jeżeli nie zostało ustawione domyślne kodowanie łańcuchów znakowych jakoLatin2, to można to zawsze wymusić
transformując łańcuch doUNICODEza pomocą koderaLatin2(napisy muszą być pisane z zastosowaniem kodownia
Latin2).
6
Kodowanie znaków diakrytycznych
int main( int argc, char "" argv )
{
bool JestParametrCzcionki = JestParametr(argc,argv, -fn );
QApplication Aplik( argc, argv );
QTextCodec "wKodowanieLatin2 = QTextCodec::codecForName( ISO 8859-2 );
if (wKodowanieLatin2) {
QTextCodec::setCodecForTr(wKodowanieLatin2);
QTextCodec::setCodecForCStrings(wKodowanieLatin2);
} else cerr <<  !!! Brak kodowania: ISO 8859-2 << endl;
. . .
SkromnyEdytor SEr;
SEr.show();
Aplik.connect( &Aplik, SIGNAL( lastWindowClosed() ), &Aplik, SLOT( quit() ) );
wWinieta >finish(&SEr);
delete wWinieta;
SEr. wEdytor >insert(  Polskie znaki diakrytyczne:\n ąćęłńóśzżĆACÓŚyŻ );
return Aplik.exec();
}
Przyjęcie odpowiedniego kodowania domyślnego nie gwarantuje jeszcze, że operacje wprowadzania znaków z klawia-
tury będą realizowane właściwie.
7
Wprowadzanie znaków diakrytycznych
class ProstyEdytorTekstuLat2: public QTextEdit { //
public :
ProstyEdytorTekstuLat2(QWidget "parent = 0L, const char "name = 0L)
QTextEdit(parent,name) {}
void keyPressEvent( QKeyEvent "wZdarzenie );
}; //
void ProstyEdytorTekstuLat2::keyPressEvent( QKeyEvent "wZdarzenie )
{
const char "wZnakPL, "ZnakiPL =  ąćęłńóśzżĆACÓŚyŻ ;
QString Napis = ZnakiPL;
QString LiteraPL;
if (isprint(wZdarzenie->ascii())) {
if ( (wZnakPL=strchr(ZnakiPL, wZdarzenie->ascii())) ) {
LiteraPL = Napis[wZnakPL-ZnakiPL];
insert(LiteraPL);
} else insert(wZdarzenie->text());
} else QTextEdit::keyPressEvent(wZdarzenie);
}
Konieczne jest odpowiednie przekodowanie znaków otrzymywanych z klawiatury. Można to wykonać poprzez przechwy-
cenie obsługi zdarzeń generowanych przez klawiaturę.
8
Korzystanie z metod translacji
yle:
const char"wNapis =  To należy przetłumaczyć ;
QString TlumaczonyNapis = wNapis;
Dobrze:
QString TlumaczonyNapis = tr ( To należy przetłumaczyć );
yle:
QString NazwaPliku;
. . .
statusBar() >message( tr( Nie znaleziono pliku:  + NazwaPliku) );
Dobrze:
statusBar() >message( tr( Nie znaleziono pliku: %1 ).arg(NazwaPliku) );
Nie zaleca się podstawiania do zmiennych napisów, które mają być tłumaczone. Je-
żeli jest to konieczne, należy to uczynić z zastosowaniem makr QT_TR_NOOP lub
QT_TRANSLATION_NOOP, np.
const char" const TabNapis[ ] = {
QT_TR_NOOP( Napis tłumaczony 1 ),
QT_TR_NOOP( Napis tłumaczony 2 )
};
9
Tłumaczenie napisów w aplikacji
1. Uruchomienielupdatew celu wydzielenia napisów podlegających tłumaczeniu.
2. Tłumaczenie napisów z zastosowanie aplikacjilinguist(Qt Linguist).
3. Uruchomienielreleasew celu generacji binarnej postaci pliku tłumaczeń (rozszerzenie
.qm) Å‚adowalnego przez obiekt klasy QTranslator.
Przykład:
0. Jeżeli w aplikacji napisy są po polsku z kodowaniemLatin2i tworzymy tłumaczenie
angielskojęzyczne, to dodajemy do projektu wpisy:
TRANSLATIONS = skromny_edytor_en.ts
DEFAULTCODEC = ISO-8859-2
Jeżeli tłumaczymy z angielskiego na polski, to wystarczy:
TRANSLATIONS = skromny_edytor_pl.ts
1. lupdate -verbose skromny_edytor.pro -skromny_edytor_pl.ts
2. linguist skromny_edytor_pl.ts -skromny_edytor_pl.ts
3. lrelease -verbose skromny_edytor.pro -skromny_edytor_pl.qm
10
Aplikacja po polsku
int main(int argc, char ""argv)
{
. . .
if (!JestParametrCzcionki) {
. . .
QApplication::setFont(CzcionkaAplikacji);
}
QTranslator TlumaczPL;
if ( TlumaczPL.load( skromny edytor pl.qm , . ) ) {
Aplik.installTranslator(&TlumaczPL);
} else cerr <<  !!! Plik  skromny edytor pl.qm nie zostal zaladowany. << endl;
. . .
}
11


Wyszukiwarka

Podobne podstrony:
18 Szablony wizualizacji danych
DPP W56 Wizualizacja danych
Praca mag Interaktywny system regułowej analizy danych marketingowych dotyczących satysfakcji klie
Kodowanie i kompresja danych
Kryptografia a bezpieczeństwo danych
Typy danych w MySQL
BAZY DANYCH Streszczenie z wykładów
PHP i Oracle Tworzenie aplikacji webowych od przetwarzania danych po Ajaksa
Ustawa z dnia 29 listopada 2000 o zbieraniu i wykorzystywaniu danych rachunkowych z gospodarstw roln
Truck Inductive sensors BI 4U M12 AP6X H1141

więcej podobnych podstron