Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Podobne dokumenty
Qt po polsku. Bogdan Kreczmer.

Qt hierarchia elementów graficznych

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3

Qt - podstawowe cechy

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Lista dwukierunkowa - przykład implementacji destruktorów

Wprowadzenie do szablonów szablony funkcji

Qt - edycja, obsługa zdarzeń, rozmieszczenie kontrolek

Wprowadzenie do szablonów szablony funkcji

Konstruktor kopiujacy

Operacje wejścia/wyjścia odsłona pierwsza

Operacje wejścia/wyjścia (odsłona druga) - pliki

Qt sygnały i designer

Pola i metody statyczne

Wprowadzenie do szablonów klas

Praca z aplikacją designer

Wyliczanie wyrażenia obiekty tymczasowe

The Graphics View Framework. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. he Graphics View Framework - architektura

Szablony funkcji i szablony klas

Szablon klasy std::list

Referencje do zmiennych i obiektów

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Szablon klasy std::vector

Przykłady oprogramowania wykorzystujacego Qt

Część 4 życie programu

Przesłanianie nazw, przestrzenie nazw

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Rzutowanie i konwersje

Klasa, metody, rozwijanie w linii

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Zaawansowane programowanie w C++

Programowanie w środowiskach RAD Qt i C++

I - Microsoft Visual Studio C++

Mechanizm sygnałów i slotów. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4. Sygnały i sloty - definicja klasy

Klasa, metody, rozwijanie w linii

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Informatyka 1. Przetwarzanie tekstów

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Programowanie komputerowe. Zajęcia 4

Wprowadzenie do języka Java

Wstęp do Programowania 2

Wykład :37 PP2_W9

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie Proceduralne

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Obiekty i metody stałe

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Internacjonalizacja i lokalizowanie aplikacji internetowych wg

Wskaźniki. Informatyka

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Pobieranie argumentów wiersza polecenia

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie w językach

Zasoby, pliki graficzne

Podstawy programowania skrót z wykładów:

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Podstawy Programowania

Podstawy programowania w języku C++

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Programowanie Procedurale. Pliki w języku C++

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Weryfikatory, zasoby graficzne

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Internacjonalizacja i lokalizowanie aplikacji internetowych wg

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Wprowadzenie do programowania i programowanie obiektowe

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Signals + Threads: Qt vs. Boost

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy programowania w języku C++

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Programowanie komputerowe. Zajęcia 1

Podstawy programowania w Qt4

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Programowanie obiektowe w C++ Wykład 12

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Transkrypt:

Aplikacja po polsku Bogdan Kreczmer ZPCiR ICT PWr pokój 307 budynek C3 kreczmer@ict.pwr.wroc.pl Copyright c 2004 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat wizualizacji danych sensorycznych. Jest on udostępiony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z ninijesza strona tytułowa.

int main( int argc, char argv ) QApplication a( argc, argv ); Kodowanie znaków narodowych 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 aęćłńóśźż A EĆŁŃÓŚŹŻ )); 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 aęćłńóśźż A EĆŁŃÓŚŹŻ ); return 0; Ustalenia kodowania znaków umożliwia klasa QtTextCodec. Pozwala ona na ustalenie kodowanie dla napisów podlegajacych tłumaczeniu. Jednak aby polskie znaki diakrytyczne były widoczne konieczne jest wybranie odpowiedniej czcionki, w której znaki te sa zdefiniowane. 1

int main( int argc, char argv ) QApplication a( argc, argv ); Kodowanie znaków narodowych 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 aęćłńóśźż A EĆŁŃÓŚŹŻ )); Info.about(NULL,QObject::tr( Informacja ze zwykłym łańcuchem znaków ), Teraz jest już dobrze.\n Polskie znaki diakrytyczne:\n aęćłńóśźż A EĆŁŃÓŚŹŻ ); return 0; Kodowanie można ustalić niezależnie dla napisów podlegajacych tłumaczeniu oraz łańcuchów znaków, które podlegaja konwersji do obiektów klasy QString. 2

int main( int argc, char argv ) QApplication a( argc, argv ); Kodowanie znaków narodowych 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 aęćłńóśźż A EĆŁŃÓŚŹŻ )); Info.about(NULL,QObject::tr( Informacja ze zwykłym łańcuchem znaków ), Teraz jest już dobrze.\n Polskie znaki diakrytyczne:\n aęćłńóśźż A EĆŁŃÓŚŹŻ ); 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 aca 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 ja bez parametrów ustawiajacych 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śli Qt zostało skompilowane ze zdefiniowanym symbolem QT_NO_DEBUG: -nograb, -dograb (tylko dla X11), -sync (tylko dla X11). Opcje Qt sa one rozpoznawane przez każdy program pisany z wykorzystaniem biblioteki Qt: -style, -session, -widgetcount. Opcje X11 tradycyjne opcje systemu X 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 aćęłńóśźż AĆ EŁŃÓŚŹŻ )); return Aplik.exec(); Jeżeli nie zostało ustawione domyślne kodowanie łańcuchów znakowych jako Latin2, to można to zawsze wymusić transformujac łańcuch do UNICODE za pomoca kodera Latin2 (napisy musza 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 aćęłńóśźż AĆ EŁŃÓŚŹŻ ); return Aplik.exec(); Przyjęcie odpowiedniego kodowania domyślnego nie gwarantuje jeszcze, że operacje wprowadzania znaków z klawiatury będa 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 = aćęłńóśźż AĆ EŁŃÓŚŹŻ ; 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 przechwycenie obsługi zdarzeń generowanych przez klawiaturę. 8

Korzystanie z metod translacji Źle: const char wnapis = To należy przetłumaczyć ; QString TlumaczonyNapis = wnapis; Dobrze: QString TlumaczonyNapis = tr ( To należy przetłumaczyć ); Źle: 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 maja 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. Uruchomienie lupdate w celu wydzielenia napisów podlegajacych tłumaczeniu. 2. Tłumaczenie napisów z zastosowanie aplikacji linguist (Qt Linguist). 3. Uruchomienie lrelease w celu generacji binarnej postaci pliku tłumaczeń (rozszerzenie.qm) ładowalnego przez obiekt klasy QTranslator. Przykład: 0. Jeżeli w aplikacji napisy sa po polsku z kodowaniem Latin2 i 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