¿Cómo se obtiene la configuración de fuente predeterminada del sistema en Qt?
windows-7 fonts (2)
Puedo pensar en dos posibles soluciones:
Puede empaquetar con su aplicación una fuente como un archivo de recursos, de esta manera todas las plataformas usarán esa fuente independientemente de la fuente predeterminada de los sistemas actuales.
La clase QFont tiene un método llamado
defaultFamily()
. Usando esto, puede establecer manualmente la fuente predeterminada para toda su aplicaciónQApplication
.
Un ejemplo (método principal):
QApplication application(argc, argv);
QFont font;
font.setFamily(font.defaultFamily());
application.setFont(font);
...rest of your code...
Estoy creando una aplicación de escritorio con Qt, mi máquina dev es win 7 x64 con configuración regional japonesa, la fuente estándar del sistema es Meiryo . La mayor parte de la IU de win 7 está en esta fuente, aunque los programas clásicos / antiguos como la propia ventana de personalización de la fuente de la interfaz de usuario utilizan una fuente diferente, que es MS UI Gothic. Esto no me molesta hasta que descubrí que QtCreator construye 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 completador personalizado con una qtableview que agrego más tarde usa Meiryo.
Hice la mayor parte de la interfaz de usuario en QtCreator''s Designer, y la versión completa que agregué en código. Si cambio la fuente de todos los widgets a Meiryo en The Designer, entonces, por supuesto, la aplicación usará Meiryo, por lo tanto, se ve bien, pero en este caso prefiero Qt elegir la fuente predeterminada del sistema automáticamente porque Win 7 no será la única. Plataforma usaré este programa.
Lo que más me preocupó aún más es que QApplication :: font () devuelve MS UI Gothic, lo cual es falso en mi caso. Por supuesto, puedo configurar la fuente para toda la aplicación usando QApplication :: setFont (), pero eso anula todo el propósito de tener el look-n-feel nativo sin fuentes de microgestión.
Así que mi pregunta es,
- ¿Cómo determina Qt la fuente predeterminada del sistema y,
- Si este es un error de Qt, ¿cómo hago para solucionarlo?
- ¿Cómo debo usar los archivos .ui y seguir utilizando mi UI para usar la fuente del sistema predeterminada en tiempo de ejecución?
Algunas aclaraciones y hechos que he encontrado.
Quiero que mi aplicación use la fuente predeterminada del sistema para CADA texto.
Esta discusión dijo que el Diseñador agregará la información de la fuente independientemente de si lo desea 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.
En mi máquina de desarrollo, QApplication :: font () devuelve la fuente predeterminada INCORRECTA. PERO, ¿por qué un QTableView que agrego más adelante en el código usa la fuente CORRECTA? ¿De dónde sacó esta información?
Entonces, si encuentro dónde encuentra QTableView esta información, puedo obtenerla en main y configurarla en toda la aplicación con QApplication :: setFont (). Entonces, lo que queda es eliminar manualmente toda la información de la fuente, entonces, HOPEFULLY funcionará. Pero esto es como por qué usamos Qt en primer lugar, ¿no es así?
Qt llamará a Windows API SystemParametersInfo
para obtener fuentes para QMenu
, QMessageBox
, etc., y usará GetStockObject
para obtener la fuente del sistema predeterminada. Algunos widgets tienen una fuente especial que es diferente a la predeterminada del sistema. Creo que Qt está haciendo lo correcto, pero el tipo de letra serif japonés / chino predeterminado se ve mal en los monitores HiDPI.
Simplemente use QFont QApplication::font ( const char * className )
para obtener la fuente correcta (Meryo en su caso), como qApp->setFont(QApplication::font("QMenu"))