2011-11-30 4 views
1

Je travaille dans un projet où je sauvegarde un dessin au format .eps. Le dessin lui-même est sur un widget, j'ai besoin de convertir la taille du widget de pixels en millimètres afin que je puisse définir la taille de l'image de sortie correctement.Comment convertir des pixels en millimètres en Qt4.7?

C'est le code que je utilise:

int widthmm = QApplication::desktop()->widthMM(); 
int heightmm = QApplication::desktop()->heightMM(); 
int widthpx = QApplication::desktop()->width(); 
int heightpx = QApplication::desktop()->height(); 
QSize epsPictureSize; 
epsPictureSize.setWidth((picture.width*widthmm)/widthpx); 
epsPictureSize.setHeight((picture.height*heightmm)/heightpx); 
epsPrinter.setPaperSize(epsPictureSize,QPrinter::Millimeter); 

Le problème est que widthMM et heightMM ne sont pas fiables et donnent des résultats faux.

J'ai besoin d'une solution multiplateforme pour obtenir les mesures physiques correctement.

+1

Je ne pense pas qu'il existe une fonction de métrique d'écran multiplateforme. Vous auriez soit besoin de compter sur Qt pour cela (ce qui échoue évidemment) ou écrire du code au niveau de la plate-forme (Win32, X11, Mac). – rubenvb

+1

Comme le dit la documentation "En raison des limites de la plate-forme, il peut ne pas être possible d'utiliser cette fonction pour déterminer la taille physique réelle d'un widget sur l'écran." Donc je pense que vous n'avez pas de chance là-bas. Il serait peut-être mieux pour vous de décider à quelle échelle quelque chose est, plutôt que de se fier à une mesure de l'écran immobilier. – Bart

+0

Rubenvb: Peut-être, mais je vais laisser cela comme un dernier recours. Bart: Je pensais avoir une échelle spécifique (par exemple 100x100 MM) et dessiner l'image dessus. Le problème est d'imaginer que j'ai une image de taille (80x40 pixels), (normal) de redimensionner et de dessiner une telle image ne fera occuper que la moitié de l'espace ... cependant, je ne pense pas que j'aurai des tailles arbitraires, ce qui pourrait J'adapte cette approche ... Je suis toujours ouvert à d'autres suggestions. Merci beaucoup –

Répondre

1

Ces fonctions demandent au système de gestion de fenêtre, qui est généralement incertain lui-même. Si vous voulez juste une interface graphique agréable, apprendre à utiliser les gestionnaires de disposition. Si vous devez afficher quelque chose de taille absolue sur l'écran (j'ai eu), vous devriez faire l'étalonnage. Afficher une ligne et laisser l'utilisateur redimensionner jusqu'à ce qu'il soit exactement, disons, 5cm.

+1

Ce n'est pas une question de gestionnaires de disposition! Si vous lisez attentivement ma question, je génère une image .eps, qui est une image vectorielle et il n'y a pas de taille "absolue" d'image vectorielle. Le problème est de spécifier combien d'espace (largeur x hauteur) l'image a besoin dans MM pour ne rien recadrer! Pour ce faire, j'ai besoin d'une méthode pour transformer mes pixels en MM, puis faire quelques transformations de viewport pour la mise à l'échelle. J'espère que je me suis fait clair maintenant. Merci pour le conseil si –

Questions connexes