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 :

afficher des pixels sur un qwidget


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Par défaut afficher des pixels sur un qwidget
    Je dispose d'un tableau de pixels (pas vraiment une image) que souhaiterait afficher dans un QWidget mais je ne sais absolument pas comment faire. Mon tableau représente en réalité le contenu d'un fichier ppm.
    Déjà, est ce que je dois utiliser une QPixmap, un QPaint, ... ?
    Ensuite, j'aimerais bien savoir comment ca marche.
    Sur le site trolltech, ils proposent justement un exemple d'utilisation dans un "jeu de tanks" mais eux, ils se servent de signaux pour afficher l'image.

    Moi je veux en fait afficher une image, mais ensuite faire du traitement dessus (détection de contours, etc...)

  2. #2
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Pour faire l'affichage, utilise QPainter sur un QPixmap. Ensuite tu peux l'afficher avec un QLabel ou dans un widget à toi où tu auras dérivé paintEvent.
    Pour ce qui est du traitement, rien n'est prévu dans Qt. Donc tu peux soit travailler directement ton image en mémoire, soit passer par une QImage au lieu d'un QPixmap. Ou encore faire le traitement avec une lib adaptée, puis afficher l'image avec le QPixmap.

    La différence QPixmap/QImage est que la première est plus orientée affichage et la seconde traitement basique si j'ai bien saisi.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Par défaut
    Voila mon fichier .hh :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class    Rendering : public QWidget
    {
    public:
      Rendering(QWidget* = 0);
     
    protected:
      void    paintEvent();
    };
    Et mon fichier .cc
    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
    Rendering::Rendering(QWidget* parent)
      : QWidget(parent)
    {
      // Rendering Initialiation
     
      // Attribute Initialization
      repaint();
    }
     
    void    Rendering::paintEvent()
    {
      QPainter paint(this);
      paint.setPen(Qt::blue);
      paint.drawText(rect(), Qt::AlignLeft, "The Text");
    }
    Ce que je comprend pas, c'est "utilise un QPainter sur un QPixmap" : ca veut dire quoi ?
    Autre chose que je ne comprend pas, c'est pourquoi le code au dessus ne fonctionne pas.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Par défaut
    non en fait, je retire ce que j'ai dit, je vais utiliser comme tu me l'as conseillé un QImage.
    Donc voici le code que j'ai :
    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
    Rendering::Rendering(QWidget* parent)
      : QWidget(parent)
    {
      // Rendering Initialiation
     
      // Attribute Initialization
      image = new QImage(100, 100, QImage::Format_RGB32);
      image->setPixel(0, 0, 0);
      image->setPixel(0, 1, 0);
      image->setPixel(0, 2, 0);
      image->setPixel(1, 0, 0);
      image->setPixel(1, 1, 0);
      image->setPixel(1, 2, 0);
      image->setPixel(2, 0, 0);
      image->setPixel(2, 1, 0);
      image->setPixel(2, 2, 0);
    }
    Sachant que Rendering est un QWidget : qu'est ce qu'il manque pour que ca marche ? comment ajouter le QImage dans mon widget ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 120
    Par défaut
    ok, c'est bon j'ai trouvé.
    Il fallait créer un QImage pour ensuite le convertir en QPixmap à l'aide de la fonction statique QPixmap::fromImage puis à affichier le QPixmap sur un label.
    merci

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

Discussions similaires

  1. Afficher des pixels pour dessiner une fonction
    Par Sandro Munda dans le forum Linux
    Réponses: 7
    Dernier message: 13/05/2007, 11h58
  2. Afficher des icônes sur le bureau avec Fluxbox
    Par Olivier Regnier dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 05/02/2007, 19h00
  3. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  4. Réponses: 2
    Dernier message: 19/12/2005, 20h11
  5. Afficher des images sur une grille
    Par Coussati dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/10/2005, 09h27

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