2012-06-13 11 views
16

Sto costruendo un'app desktop utilizzando Qt, la mia macchina di sviluppo è win 7 x64 con impostazioni internazionali giapponesi, il font di sistema standard è Meiryo. La maggior parte di Windows 7 UI è in questo tipo di carattere, sebbene i programmi classici/precedenti come la finestra di personalizzazione del font ui stesso utilizzi un font diverso, che è MS UI Gothic. Questo non mi disturba fino a quando non ho scoperto che QtCreator costruisce la mia app con MS UI Gothic in un posto, e Meiryo nell'altro. Ad esempio, qlabels, qlineedits, qcombobox utilizza tutti MS UI Gothic, ma un completatore personalizzato con qtableview che aggiungo in seguito usa Meiryo.Come si ottengono le impostazioni predefinite dei font di sistema in Qt?

Ho realizzato la maggior parte dell'interfaccia utente in QtCreator's Designer e il completamento completato nel codice. Se cambio il font di tutti i widget in Meiryo in The Designer, allora ovviamente l'app utilizzerà Meiryo quindi sembra giusto, ma in questo caso preferirei che Qt scelga automaticamente il tipo di carattere predefinito del sistema per me perché win 7 non sarà l'unico piattaforma userò questo programma.

Ciò che ha sollevato la mia preoccupazione ancora di più è che QApplication :: font() restituisce MS UI Gothic, che nel mio caso è falso. Ovviamente, posso impostare il tipo di carattere per l'app usando QApplication :: setFont() ma ciò vanifica l'intero scopo di avere il look-n-feel nativo senza i caratteri di micromanaging.

Quindi la mia domanda è,

  1. come si fa Qt determinare font di default del sistema e,
  2. se questa è una Qt Bug come posso fare per ottenere intorno ad esso?
  3. come dovrei usare i file .ui e ho ancora la mia interfaccia utente usare il font di sistema predefinito in runtime?

alcuni chiarimenti e fatti che ho trovato

  1. Voglio che la mia app per utilizzare font di default del sistema per ogni testo.

  2. This discussion ha dichiarato che Designer aggiungerà informazioni sui font indipendentemente dal fatto che lo si voglia o meno. Quindi Qt onorerà queste informazioni piuttosto che i font di default del sistema. Almeno qualcuno ha menzionato la rimozione manuale di queste informazioni dovrebbe fare in modo che Qt scelga il font di default del sistema in runtime.

  3. Nella mia macchina di sviluppo QApplication :: font() restituisce il carattere predefinito WRONG. MA come mai un QTableView che aggiungo più avanti nel codice usa il carattere RIGHT? Dove ha preso queste informazioni?

Quindi, se trovo dove QTableView trova queste informazioni, posso farlo nel principale, e impostarlo app largo con QApplication :: setFont(). Quindi ciò che rimane è la rimozione manuale di tutte le informazioni sui font, quindi HOPEFULLY funzionerà. Ma questo è il motivo per cui usiamo Qt, non è vero?

+0

programmi ps Qt demo ha mostrato questi sintomi come bene, e io non uso QtSDK binario, ho compilato Qt me stesso per ogni x86 e x64 e usano entrambi da QtCreator (il file binario distribuito). la mia toolchain è msvc2010 express. – Evan

+0

indovina nessuno lo sa eh – Evan

+0

Se non diversamente specificato, Qt utilizza il carattere di sistema predefinito per il rendering del testo. [Questo post] (http://qt-project.org/faq/answer/how_does_qt_pick_a_font_for_the_application) discute brevemente i caratteri utilizzati di default su diversi sistemi operativi. Forse sono confuso, se vuoi solo il font di sistema predefinito per OS, non fare nulla ed è quello che otterrai ... Se hai bisogno di sapere che cosa è quel font per qualche motivo, prova questo] (http://lists.trolltech.com/qt-interest/2002-10/thread00280-0.html). –

risposta

9

posso pensare a due possibili soluzioni:

  1. Si potrebbe imballare con l'applicazione di un carattere come un file di risorse, in questo modo tutte le piattaforme useranno quel font indipendentemente il tipo di carattere di default del sistema attuale.

  2. La classe QFont ha un metodo chiamato defaultFamily(). Usando questo è possibile impostare manualmente il carattere predefinito per l'intero QApplication.

Un esempio (metodo principale):

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

defaultFamily() su Mac restituisce solo alcuni nomi codificati, piuttosto che il sistema stesso specificato. –

1

Qt chiamerà API di Windows SystemParametersInfo per ottenere i caratteri per QMenu, QMessageBox ecc, e utilizzare GetStockObject per ottenere carattere di sistema predefinito. Alcuni widget hanno un font speciale diverso da quello predefinito del sistema. Penso che Qt stia facendo la cosa giusta, ma il tipo di carattere serif giapponese/cinese predefinito appare negativo sui monitor HiDPI.

Basta usare QFont QApplication::font (const char * className) per ottenere il giusto tipo di carattere (Meryo nel tuo caso), come ad esempio qApp->setFont(QApplication::font("QMenu"))

Problemi correlati