Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] Problème de dimention.

show?

Sujet résolu
Anonyme
    4 mars 2008 à 14:46:19

    Bonjour à vous! :)

    J'ai quelque problème ennuyeux de présentation avec Qt.

    Mon code est plutôt court alors ça va bien. Je vous le décris vite et je vous explique ensuite par une image ce qui ne va pas.
    J'ai deux classe : Window et Version.
    Window contient un attribut de type version et dois l'afficher dans son coin supérieur droit.
    1. #include <QLineEdit>
    2. #include <QLabel>
    3. #include <iostream>
    4. using namespace std;
    5. class Version : public QWidget
    6. {
    7.     public:
    8.         Version(QWidget *parent = 0);
    9.     private:
    10.         QLineEdit *myLineEdit;
    11.         QLabel *myLineEditText;
    12. };
    13. Version::Version(QWidget *parent) : QWidget(parent)
    14. {
    15.     myLineEditText = new QLabel("Version", this);
    16.     myLineEditText->move(0, 0);
    17.     myLineEdit = new QLineEdit(this);
    18.     myLineEdit->move(myLineEditText->width(), 0);
    19.     cout << "_v_" << endl
    20.          << myLineEdit->width() << " + " << myLineEditText->width() << " = "
    21.          << myLineEdit->width()+myLineEditText->width() << endl;
    22. }

    1. #include "Version.hpp"
    2. #include <iostream>
    3. using namespace std;
    4. class Window : public QWidget
    5. {
    6.     Q_OBJECT
    7.     public:
    8.         Window();
    9.     private:
    10.         Version *myVersion;
    11.         static const int WindowX = 0, WindowY = 0,
    12.                          WindowWidth = 500, WindowHeight = 500,
    13.                          Margin = 5;
    14. };
    15. Window::Window() : QWidget()
    16. {
    17.     /// Window's size.
    18.     this->setGeometry(WindowX,
    19.                       WindowY,
    20.                       WindowWidth,
    21.                       WindowHeight);
    22.     this->setFixedSize(this->size());
    23.     myVersion = new Version(this);
    24.     myVersion->move(WindowWidth - myVersion->width() - Margin,
    25.                     Margin);
    26.     cout << "_W_" << endl
    27.          << myVersion->width() << endl;
    28. }


    _v_
    100 + 100 = 200
    _W_
    200


    Et une image d'illustration.
    Qt size problem

    (Bon, il y a une petit bordure, c'est normal, j'ai un QGroupBox en plus. N'y prêtez pas attention.)

    Le problème est évident : l'objet "version" est décalé. Car sa taille n'est pas la bonne.

    Comment y remédier?

    J'ai trouvé une pseudo parade :
    Utiliser show comme ceci :
    1. Version::Version(QWidget *parent) : QWidget(parent)
    2. {
    3.     myLineEditText = new QLabel("Version", this);
    4.     myLineEditText->move(0, 0);
    5.     myLineEdit = new QLineEdit(this);
    6.     myLineEdit->move(myLineEditText->width(), 0);
    7.     myLineEditText->show();
    8.     myLineEdit->show();
    9.     this->show();
    10.     cout << "_v_" << endl
    11.          << myLineEdit->width() << " + " << myLineEditText->width() << " = "
    12.          << myLineEdit->width()+myLineEditText->width() << endl;
    13. }


    _v_
    110 + 46 = 156
    _W_
    210

    Et une nouvelle illustration :
    Qt size problem 2


    Et cette solution ne me convient pas ! Je doute fort qu'on doive faire des show comme ça. Car la hauteur ne change pas : l'objet "version" est toujours mal positionné verticalement. Et l'espace entre "Version" et la zone de saisie est trop grand.

    Voilà, c'est tout. :-°

    Merci à tous ceux qui m'aideront de près ou de loin!
    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2008 à 15:18:47

      Avec QT designer t'as un petit objet en forme de ressort qui te permet d'espacer les objets, par contre je ne sais pas le faire marcher en ligne de commande. C'est peut être la solution à ton problème.
      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2008 à 15:24:53

        oui addStretch() te permettra surement d'atteindre ce que tu veux faire.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          4 mars 2008 à 17:36:15

          Citation : altic

          oui addStretch() te permettra surement d'atteindre ce que tu veux faire.

          J'ai pas trouver dans la doc. C'est quoi? Comment ça s'utilise?
          • Partager sur Facebook
          • Partager sur Twitter
            4 mars 2008 à 17:49:26

            Bonjour,

            Voici ce que j'ai trouvé.

            1. void QBoxLayout::addStretch ( int stretch = 0 )
            2. Adds a stretchable space (a QSpacerItem) with zero minimum size and stretch factor stretch to the end of this box layout.
            3. See also insertStretch(), addItem(), and QSpacerItem.


            Source : Documentation Qt

            Espérant t'avoir aidé,

            Raph.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              4 mars 2008 à 17:56:27

              Merci Raph.

              Mais je n'utilise pas de QBoxLayout.

              En attendant, par PUR CHANCE, je suis tombé sur adjustSize(). Je dois l'utiliser avec tous mes objet mais ça fonctionne ensuite!
              • Partager sur Facebook
              • Partager sur Twitter

              [Qt] Problème de dimention.

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown