2012-06-13 15 views
16

Estoy construyendo una aplicación de escritorio usando Qt, mi máquina dev es win 7 x64 con configuración regional japonesa, la fuente del sistema estándar es Meiryo. La mayor parte de la interfaz de usuario de win 7 está en esta fuente, aunque los programas clásicos/antiguos, como la ventana de personalización de la fuente ui en sí, usa una fuente diferente que es MS UI Gothic. Esto no me molesta hasta que descubrí que QtCreator crea mi aplicación con MS UI Gothic en un lugar y Meiryo en el otro. Por ejemplo, qlabels, qlineedits, qcombobox usa MS UI Gothic, pero un complemento personalizado con una qtableview que agrego luego usa Meiryo.¿Cómo se obtiene la configuración de fuente predeterminada del sistema en Qt?

Hice la mayor parte de la interfaz de usuario en QtCreator's Designer, y la completé en el código. Si cambio la fuente de todos los widgets a Meiryo en The Designer, entonces la aplicación usará Meiryo, por lo tanto, mira bien, pero en este caso prefiero que Qt elija la fuente predeterminada de cualquier sistema automáticamente porque win 7 no será el único plataforma Usaré este programa.

Lo que más me preocupa es que QApplication :: font() devuelve MS UI Gothic, que es falso en mi caso. Por supuesto, puedo establecer una fuente para toda la aplicación usando QApplication :: setFont(), pero eso frustra el propósito de tener el look-n-feel nativo sin micro fuentes.

Así que mi pregunta es,

  1. Qt ¿cómo determinar la fuente por defecto del sistema y,
  2. si se trata de un error de Qt cómo hago para conseguir alrededor de él?
  3. ¿cómo debo usar los archivos .ui y aún tener mi UI usar la fuente predeterminada del sistema en tiempo de ejecución?

Algunas aclaraciones y hechos que encontraron

  1. Quiero que mi aplicación utilice la fuente por defecto del sistema para cada texto.

  2. This discussion dijo que Designer agregará la información de la fuente independientemente de si la quiere o no. Entonces Qt respetará esta información en lugar de la fuente predeterminada del sistema. Al menos alguien mencionó que eliminar esta información manualmente debería hacer que Qt elija la fuente predeterminada del sistema en tiempo de ejecución.

  3. En mi máquina de desarrollo, QApplication :: font() devuelve la fuente predeterminada INCORRECTA. PERO, ¿cómo es que una QTableView que agrego más tarde en el código usa la fuente RIGHT? ¿De dónde sacó esta información?

Así que si encuentro donde QTableView encuentra esta información, puedo conseguirlo en el principal, y configurarlo aplicación amplia con QApplication :: setFont(). Luego, lo que queda es eliminar manualmente toda la información de la fuente, luego, ESPERAMENTE, funcionará. Pero esto es como por qué usamos Qt en primer lugar, ¿no?

+0

programas de demostración ps Qt mostraron estos síntomas también, y yo no uso QtSDK binario, compilé Qt mismo para cada x86 y x64 y usar ambos desde QtCreator (el distribuido binario). mi herramienta es msvc2010 express. – Evan

+0

supongo que nadie sabe eh – Evan

+0

A menos que se especifique lo contrario, Qt usa la fuente predeterminada del sistema para representar el texto. [Esta publicación] (http://qt-project.org/faq/answer/how_does_qt_pick_a_font_for_the_application) describe brevemente las fuentes utilizadas por defecto en diferentes sistemas operativos. Quizás estoy confundido, si solo quieres la fuente predeterminada del sistema por sistema operativo, no hagas nada y eso es lo que obtendrás ... Si necesitas saber cuál es esa fuente por alguna razón, [prueba esto] (http://lists.trolltech.com/qt-interest/2002-10/thread00280-0.html). –

Respuesta

9

me ocurren dos soluciones posibles:

  1. Se puede empacar con su solicitud de una fuente como un archivo de recursos, de esta manera todas las plataformas van a utilizar esa fuente, independientemente de la fuente actual por defecto del sistema.

  2. La clase QFont tiene un método llamado defaultFamily(). Al usar esto, puede establecer manualmente la fuente predeterminada para su entero QApplication.

Un ejemplo (método principal):

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

defaultFamily() en Mac solo devuelve algunos nombres codificados, en lugar de lo que especifica el sistema. –

1

Qt llamará a la API de Windows SystemParametersInfo para obtener fuentes de QMenu, QMessageBox etc., y utilizar GetStockObject para obtener fuentes de sistema predeterminado. Algunos widgets tienen una fuente especial que es diferente a la predeterminada del sistema. Creo que Qt está haciendo lo correcto, pero la fuente serif predeterminada japonesa/china se ve mal en los monitores HiDPI.

Sólo tiene que utilizar QFont QApplication::font (const char * className) para obtener la fuente correcta (Meryo en su caso), como qApp->setFont(QApplication::font("QMenu"))

Cuestiones relacionadas