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

Qt Discussion :

Problème avec QRect


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut Problème avec QRect
    Bonjour, Je dessine un rectangle dont la longueur peut varier dans une grille.Mon rectangle ne peut contenir que dans la grille, si la longueur depasse alors le reste est dessiner sur la ligne suivante comme dans le figure 1.
    Mon probléme j'arrive pas à le faire avec QRect.operator |= (QRect) , figure 2, car il me dessine le rectangle englobant alors que c'est pas ce que je veux.
    Voici ma fonction qui dessine le rectangle :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    void Appli::DrawRect(QPainter *painter, CDrawr* pFixture)
    {
     
        QRect rect1 = GetRectItem(CDrawr->m_address - 1);
        QRect rect2;
     
        for(int iChan = CDrawr->m_address + 1; iChan <= CDrawr->m_endAddress; iChan++)
        {
            rect2 = QRect(GetRectItem(iChan));
            rect1.operator |=(rect2);
     
        }
     
         painter->fillRect(rect1, Qt::darkGray);
     
     
     
     
    }
    il englobe les 2 lignes sur lesquelles les rects sont contenus, alors j'aimerais avoir uniquement les rects associés les uns apres les autres sur les lignes sans toucher à la hauteur.

    Merci de votre help!

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Tu ne peux pas dessiner la forme voulue avec un seul rectangle. Dans ta représentation, ton rectangle "va à la ligne", mais pour la machine, un rectangle est un truc qui à 4 coins et 4 côtés sur ton écran (hors le tien a en réalité 8 coins et 8 côtés).

    Et sinon (je n'ai pas lu la doc), mais es tu sûr que l'operateur | réalise l'intersection des deux recrangles ? Pour moi, cela retournerait plutôt l'union des 2.

    G.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour lisco

    Votre question ressemble beaucoup à celles que vous avez déjà posées concernant ce problème. Donc, avec l'impression de se répéter :

    un QRect est... un rectangle ! Pas un ensemble de rectangle. Pas un objet graphique visible à l'écran. Comme le dit Gulish, un rectangle "est un truc qui à 4 coins et 4 côtés". Point.

    Si vous voulez manipuler un ensemble de rectangle, vous pouvez utiliser une liste de rectangle ou une région (QRegion). Mais pas un QRect.

    Donc comprenez bien que lorsque vous dites :
    Je dessine un rectangle ...
    vous concevez très mal votre problème (et donc, vous ne pouvez pas le résoudre). Ce que vous souhaitez en fait, c'est de dessiner un objet graphique qui représente un ensemble de plusieurs rectangles.

    Si vous avez compris cela, il ne reste plus qu'a modifier votre code en conséquence.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    vous concevez très mal votre problème (et donc, vous ne pouvez pas le résoudre). Ce que vous souhaitez en fait, c'est de dessiner un objet graphique qui représente un ensemble de plusieurs rectangles.

    Si vous avez compris cela, il ne reste plus qu'a modifier votre code en conséquence.
    C'est ce que je veux exactement, un objet graphique qui represente un ensemble de plusieurs rectangles, mais je trouve aucun moyen de le faire , enfin je suis debutant en Qt.
    Et je pense que QRegion est le meilleur moyen de le faire, j'ai essayé ceci mais ya rien qui est dessiné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void Appli::Drawrect(QPainter *painter, CDrawr* dra)
    {
     
        QRegion rgn1(rect(CDrawr->deb), QRegion::Rectangle);
        for(int i = dra->deb + 1; i <= dra->fin; i++)
            {
               QRegion  rgn2(rect(i));
                rgn1.unite(rgn2);
     
            }
     
        painter->setClipRegion(rgn1);
     
     
    }
    j'ai besoin d'un coup de pouce svp pour me debloquer.

    Merci d'avance!

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    C'est quoi pFixture, m_address, m_endAddress et GetRectItem ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 237
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    C'est quoi pFixture, m_address, m_endAddress et GetRectItem ?
    Merci j'ai réussi à le faire, ce qu'il fallait que je saisisse c'est que QRegion représente une Zone d'affichage.
    Pour revenir à votre question: pFixture c'est un objet qui a une adresse de depart c'est a dire là ou doit se placer le premier rectangle obtenu par GetRectItem(i) et m_endAddress represente le dernier rectangle !

    Une autre question, ce que j'ai fait c'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Appli::Drawr(QPainter *painter, CDrawr* dra)
    {
     
     
        for(int i = dra->deb+ 1; i<= dra->fin; i++)
        {
           painter->fillRect(rect(i), Qt::black);
     
         }
     
    }
    Est ce possible de faire du Drag and Drop da ma QRegion? Cad le deplacer dans ma grille?

    Encore merci!

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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