qt i polskie fonty

0

Jest sobie taki kod dotyczączy zmiany fontów w widgetach (Akurat widgety dowolne, fontu i tak nie ma)...

#include <qapplication.h>
#include <qpushbutton.h>
#include <qfont.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
#include <qstatusbar.h>
#include <qmainwindow.h>

class QLampy:public QMainWindow{

  public:
    QLampy();
  private:

    QFont*      font;
    QPopupMenu* ksiegowosc; 
    QPopupMenu* narzedzia;
    QMenuBar*   menu;

    // ...

};


QLampy::QLampy(){

  font=new QFont( "Tahoma",10,QFont::Bold);

  // ...

  ksiegowosc=new QPopupMenu();
  ksiegowosc->setFont(*font);
  ksiegowosc->insertItem("&Kupno");
  ksiegowosc->insertItem("&Sprzedaż");

  // ...

  narzedzia=new QPopupMenu();
  narzedzia->setFont(*font);
  narzedzia->insertItem("&Katalog");

  // ...

  menu=new QMenuBar(this);
  menu->setFont(*font);

  // ...

  menu->insertItem("&Księgowość",ksiegowosc);
  menu->insertItem("&Narzędzia",narzedzia);

  // ...

}

int main(int argc,char** argv){
  QApplication a(argc,argv);
  QLampy L;
  a.setMainWidget(&L);
  L.show();
  a.exec();
  return 0;
}

Czyli jak widać bardzo klasycznie. Problemem zaś jest brak polskich liter...

user image

Kodowanie żródła/tekstów to iso8859-2, ale nawet zmieniając na utf8 (złe kody ? Ale chyba nie, kate raczej by sie aż tak nie źle nie zachowało) nie działa....

char* iso2utf(char* s){
  unsigned char utf8[]
      ={196,133,196,135,196,153,197,130,197,132,195,179,197,155,197,186,197,188,
        196,132,196,134,196,152,197,129,197,131,195,147,197,154,197,185,197,187};
  static char b[256]; // tu jest ograniczenie funkcji
  char* p=b;
  while(*s){
    char* t;
    char* u="ąćęłńóśźżĄĆĘŁŃÓŚŹŻ";
    if((t=strchr(u,*s))){
      int i=((t-u)<<1);
      //fprintf(stderr,"%d",i); // debug code
      *p++=(char)utf8[i];
      *p++=(char)utf8[++i];
    }else{
      *p++=*s;
    }
    s++;
  }
  *p=0;
  return b;
}

// ...

menu->insertItem(iso2utf("&Księgowość"),ksiegowosc);

Co z tym fantem zrobić ? Czy może są to w ogóle zewnętrzne ustawienia qt ? Czy może jest to kwestia użycia char* zamiast klasy QString (jakas błedna automatyczna konwersja) ? Może zły konstruktor dla QFont (cos widzialem, ze podawało sie pełną nazwe fontu - w takim razie co tam wpisać) ? Może coś Makefile ?

// Gdyby ktos chciał to kompilowac, to wykonać w katalogu, w ktorym znajdzie sie plik cpp : qmake -project && qmake && make

0

Jeżeli oczywiście źródła (znaczy teksty polskie) są na pewno kodowane odpowiednim standardem to jeszcze jest coś takiego jak

QLocale

chyba... takie std::locale dla QT :) Zaznaczam, że strzelam tylko... Ale to mi się nasuwa od razu przy problemach z językiem. Na Linuxie oczywiśćie zmienne środowiskowa LC_xxx grają rolę...

A ten-tego, to może być przydatne:
"Internationalization with Qt"
http://www.jtz.org.pl/Inne/QT-Tutorial/i18n.html

// Dzięki wielkie, właśnie o ten link chodziło
//

#include <qtextcodec.h>

//

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("ISO8859-2"));

// [mf]

1 użytkowników online, w tym zalogowanych: 0, gości: 1