IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Fonction de QPrinter::getPageMargins

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut Fonction de QPrinter::getPageMargins
    Bonjour à tous,

    Cette fois-ci c'est une fonction que je ne comprend pas, la suivante :
    void QPrinter::getPageMargins ( qreal * left, qreal * top, qreal * right, qreal * bottom, Unit unit ) const

    Returns the page margins for this printer in left, top, right, bottom. The unit of the returned margins are specified with the unit parameter.

    This function was introduced in Qt 4.4.
    Mon but est de récupérer les valeurs des marges de chaque coté de la page.
    Je vois pas comment cette méthode peut être utilisé, si elle ne retourne rien ?

    (nota : c'est peut être un problème de C++, je n'ai jamais eu à faire à un "get" qui ne retourne rien et qui prend des paramètres)

    Merci d'avance pour votre aide

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 963
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 963
    Par défaut
    Jea,

    Elle te renverra les données left, top... via leur adresse, puisque tu les passe par adresse (tu passes un pointeur sur ces données).

    Ne pas oublier de passer l'adresse, justement, et non les données.

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Merci, c'est bon j'ai réussi à l'utiliser

    Par contre, j'ai mis l'unité en millimètre, et voila ce qu'il me ressort avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QPrinter *printer = new QPrinter();
            qreal *left = new qreal;
            qreal *top = new qreal;
            qreal *right = new qreal;
            qreal *bottom = new qreal;
            printer->getPageMargins(left, top, right, bottom, QPrinter::Millimeter);
            qDebug()<< *left<<", "<<*top<<", "<<*right<<", "<<*bottom;
    résultat du Debug :
    3.39001 , 2.96001 , 3.39001 , 5.04001

    Alors que la feuille a des marges de 2,5 CM à la sortie de l'imprimante... C'est quoi ce qui m'échappe ?

    Voici mon début de code pour générer la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QTextCursor cursor(this->textCursor());
         cursor.movePosition(QTextCursor::Start);
     
         QTextFrame *topFrame = cursor.currentFrame();
         QTextFrameFormat topFrameFormat = topFrame->frameFormat();
         topFrameFormat.setPadding(5);
         topFrameFormat.setBorder(1); //affichage de la bordure
         topFrame->setFrameFormat(topFrameFormat);
    Merci d'avance

  4. #4
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Utilises plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    QPrinter *printer = new QPrinter();
            qreal left;
            qreal top;
            qreal right;
            qreal bottom;
            printer->getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
            qDebug()<<  left<<", "<< top<<", "<< right<<", "<< bottom;
    Comme ça pas de new, pas de fuite de mémoire possible.

    Pour les marges je ne sais pas, je n'ai jamais joué avec l'imprimante.

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Merci pour le code.
    Les valeurs étaient toujours les mêmes donc je n'avais pas affaire à une quelconque fuite de mémoire.

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    QPrinter *printer = new QPrinter();
            printer->setPageMargins(10, 5, 10, 5, QPrinter::Millimeter);
            qreal left;
            qreal top;
            qreal right;
            qreal bottom;
            printer->getPageMargins(&left, &top, &right, &bottom, QPrinter::Millimeter);
            qDebug()<<left<<", "<<top<<", "<<right<<", "<<bottom;
    Le résultat du debug :
    9.99002 , 4.99001 , 9.99002 , 4.99001
    et c'est aussi ce que j'obtiens en imprimant (excepté pour 'top' où j'ai environ 6 mm, mais la je chipote )

    Donc avec setPageMargins mes marges deviennent bonnes...
    J'ai ce que je voulais de toute manière, je voulais juste tester getPageMargins pour connaitre les marges par défauts...

    Merci beaucoup !

  6. #6
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Oui, ça ne change en rien les valeurs c'est sur. Pour le coup de la fuite de mémoire c'est que si dans le code avec les new tu ne fais pas ensuite de delete left, delete top, etc. et que tu perds les adresses de ces entiers (p.ex. si tu sors de la fonction) là ça te fais une fuite. Avec l'autre méthode, il n'y a pas de risque.

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Y'a des choses qui m'échappe alors, Qt ne gère pas la destruction de ses pointeurs vers qreal ?
    Pourquoi ne m'as-tu pas proposé de faire la même chose pour QPrinter que j'utilise aussi ?


    Va falloir que je revois la 'dés-allocation' de mémoire sous Qt, parce que je me pose des questions du coup

    Merci en tout cas !

    EDIT : Autoréponse peut être, parce que qreal n'est pas sous classe de QObject

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Somato Voir le message
    EDIT : Autoréponse peut être, parce que qreal n'est pas sous classe de QObject
    oui.
    Par contre ton QPrinter n'as pas de parent... il ne sera donc pas désalloué

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 239
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    oui.
    Par contre ton QPrinter n'as pas de parent... il ne sera donc pas désalloué
    Yep donc, étant donné que je suis dans le main.cpp (parce que j'y fais mes tests) je l'ai passé de la même façon que les qreal.

    Merci pour l'aide.

  10. #10
    Membre chevronné

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Par défaut
    Citation Envoyé par Somato Voir le message
    Pourquoi ne m'as-tu pas proposé de faire la même chose pour QPrinter que j'utilise aussi ?
    Parce que ça ne m'a pas sauté aux yeux alors que voir un new qreal (ou plus généralement un new int, float etc.) ça fait sonner plein de sonneries dans ma tête.
    D'ailleurs pour QPrinter ça peut être normal si tu t'en sers ailleurs, que tu le passes à d'autres objets, etc. Par contre pour un qreal ça m'aurait étonné que ça soit pas juste pour regarder les valeurs des marges.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo