2012-06-13 9 views
16

Buduję aplikację na komputer przy użyciu Qt, moja maszyna dev wygrywa 7 x 64 z japońskim ustawieniem regionalnym, standardowa czcionka systemowa to Meiryo. Większość z 7 interfejsu użytkownika znajduje się w tej czcionce, chociaż klasyczne/starsze programy, takie jak okno dostosowywania czcionek ui, używają innej czcionki, jaką jest MS UI Gothic. To mi nie przeszkadza, dopóki nie odkryłem, że QtCreator tworzy moją aplikację z MS UI Gothic w jednym miejscu, a Meiryo w drugim. Na przykład qlabels, qlineedits, qcombobox all używa MS UI Gothic, ale niestandardowy użytkownik z qtableview, który doda później, używa Meiryo.Jak uzyskać domyślne ustawienia czcionek systemowych w Qt?

Zrobiłem większość interfejsu użytkownika w Projektancie QtCreator, a wykonawca dodałem w kodzie. Jeśli zmienię czcionkę wszystkich widżetów na Meiryo w Projektancie, to oczywiście aplikacja będzie korzystać z Meiryo, dlatego wyglądam dobrze, ale w tym przypadku wolałbym, aby Qt wybrał automatycznie domyślną czcionkę systemu, ponieważ wygrana 7 nie będzie jedyną platforma Będę używał tego programu.

Co jeszcze bardziej podniosło moją obawę, to QApplication :: font() zwraca MS UI Gothic, który w moim przypadku jest fałszywy. Oczywiście mogę ustawić czcionkę na całej aplikacji za pomocą QApplication :: setFont(), ale to pokonuje cały cel posiadania natywnego wyglądu bez użycia czcionek mikromanaging.

Więc moje pytanie brzmi,

  1. jak Qt określić domyślną czcionkę i układ,
  2. jeśli jest to Qt Bug jak mogę iść o poruszanie się po niej?
  3. Jak korzystać z plików .ui i czy mój UI powinien używać domyślnej czcionki systemowej w środowisku wykonawczym?

pewne wyjaśnienia i fakty znalazłem

  1. Chcę moja aplikacja używać domyślnej czcionki systemowej dla każdego tekstu.

  2. This discussion powiedział, że Designer doda informacje o czcionce niezależnie od tego, czy tego chcesz, czy nie. Więc Qt będzie honorować te informacje, a nie domyślną czcionkę systemową. Przynajmniej ktoś, kto wspomniał o ręcznym usunięciu tych informacji, powinien ustawić czcionkę domyślną systemu Qt pick w środowisku wykonawczym.

  3. W mojej maszynie dev QApplication :: font() zwraca WRONG domyślną czcionkę. ALE w jaki sposób QTableView dodany później w kodzie używa czcionki RIGHT? Skąd się wzięły te informacje?

Więc jeśli znajdę gdzie QTableView znajdzie te informacje, można uzyskać go w główny i ustaw go aplikacja szeroki z QApplication :: setFont(). Pozostaje ręczne usunięcie wszystkich informacji o czcionce, a NADZIEJA to zadziała. Ale to jest tak, dlaczego używamy Qt na pierwszym miejscu, nieprawdaż?

+0

programy ps Qt Demo pokazał takie objawy, jak również i nie używam binarne QtSDK, Skompilowałem QT się dla każdego x86 i x64 i użyj obu z QtCreator (binarnie rozproszonego). moim toolchainem jest ekspresowa msvc2010. – Evan

+0

domyślam się, że nikt nie wie huh – Evan

+0

O ile nie określono inaczej, Qt używa domyślnej czcionki systemowej do renderowania tekstu. [Ten post] (http://qt-project.org/faq/answer/how_does_qt_pick_a_font_for_the_application) krótko omawia czcionki używane domyślnie w różnych systemach operacyjnych. Być może jestem zdezorientowany, jeśli chcesz tylko domyślnej czcionki systemowej na system operacyjny, nie rób nic i to dostaniesz ... Jeśli musisz wiedzieć, co to jest czcionka z jakiegoś powodu, [spróbuj tego] (http://lists.trolltech.com/qt-interest/2002-10/thread00280-0.html). –

Odpowiedz

9

mogę myśleć o dwóch możliwych rozwiązań:

  1. Można zapakować z aplikacją czcionkę jako plik zasobów, w ten sposób wszystkie platformy będą używać tej czcionki niezależnie bieżącego domyślnego systemy czcionki.

  2. Klasa QFont ma metodę o nazwie defaultFamily(). Dzięki temu możesz ręcznie ustawić domyślną czcionkę dla całej swojej QApplication.

Przykładem (metoda main):

QApplication application(argc, argv); 
QFont font; 
font.setFamily(font.defaultFamily()); 
application.setFont(font); 
...rest of your code... 
+0

defaultFamily() na komputerze Mac zwraca tylko niektóre zakodowane nazwy, a nie to, co sam system określa. –

1

Qt wezwie Windows API SystemParametersInfo dostać czcionek dla QMenu, QMessageBox itd., I używać GetStockObject dostać domyślnej czcionki systemowej. Niektóre widżety mają specjalną czcionkę, która różni się od domyślnej. Myślę, że Qt robi dobrze, ale domyślna czcionka serif japońska/chińska wygląda źle na monitorach HiDPI.

Wystarczy użyć QFont QApplication::font (const char * className), aby uzyskać odpowiednią czcionkę (Meryo w Twoim przypadku), takie jak qApp->setFont(QApplication::font("QMenu"))