J'ai besoin d'un moyen de traduire la taille des points et la taille des pixels entre plusieurs plates-formes.Convertir la taille de pixel en taille de point pour les polices sur plusieurs plates-formes
J'ai une application Qt qui doit fonctionner sur plusieurs plates-formes, y compris un Linux embarqué sur un type de tablette.
Il est prévu que les utilisateurs puissent enregistrer des fichiers créés par l'application, sur un bureau (Windows ou Linux) et ouverts sur le périphérique personnalisé.
Les données se composent de dessins et du texte - QGraphicsItem
sur QGraphicsScene
. Certains éléments de texte sont "texte riche", nous pouvons donc changer de police sur des fragments de texte.
Pour le texte normal, y compris tout le texte de l'interface utilisateur, nous avons utilisé la taille de pixel au lieu de la taille de point pour obtenir un aspect similaire. Mais le texte riche me défie: le QTextCharFormat
n'a pas une option pixelSize()
. Seulement setFontPointSize()
et fontPointSize()
. Je peux utiliser font().setPixelSize()
puis setFont()
mais le résultat est que lors de la sauvegarde, en utilisant la méthode html()
, je perds toutes les informations de police. (Ce doit être un bug qt?)
Donc, ce dont j'ai besoin est de pouvoir utiliser la taille des pixels partout, puis de calculer la taille du point pour le paramétrer sur les paragraphes (et inverser la lecture des tailles).
Mais - quelle est la relation entre la taille des pixels et la taille des points? Si je détermine les deux, pour une police donnée, sur la plate-forme actuelle, puis-je établir une sorte d'équation à utiliser? Edit - J'ai trouvé un post intéressant - il semble faire ce que je veux, mais il est spécifique à OSX seulement. https://stackoverflow.com/a/25929628/1217150
Mes plates-formes cibles, Windows/Linux/OSX mais aussi, surtout, une tablette personnalisée exécutant Linux embarqué, et éventuellement dans les futurs appareils Android.
Qt 4.8
Modifier - en utilisant la conversion en réponse ci-dessous, le texte à gauche en utilisant setPixelSize (20) et le texte à droite en utilisant setPointSize (20 * screenDPI) où
qreal screenDpi = QApplication::desktop()->physicalDpiX()/72.;
Notez la taille est pas même ... (en cours d'exécution dans les fenêtres, ne sont pas encore testé sur d'autres plates-formes)
J'ai même essayé
#ifdef Q_OS_WIN32
qreal screenDpi = QApplication::desktop()->physicalDpiX()/96.;
#else
qreal screenDpi = QApplication::desktop()->physicalDpiX()/72.;
#endif
essayez d'utiliser 'setPointSize (20/72 * screenDPI)' 'où qreal screenDPI = QApplication :: bureau() -> logicalDpiX() 'car' logicalDpi' et 'physicalDpi' peuvent avoir des valeurs différentes. –