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 :

QPixmap et image BMP enregistrée

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut QPixmap et image BMP enregistrée
    Salut à tous

    Je débute le C++ et Qt mais pas le développement en général (ca fait 15 ans que je travaille avec Windev) et je suis un peu bloqué avec Qt.
    J'ai créé une fenêtre avec un QGraphicsView et un bouton.
    Au clic sur le bouton, je dessine dans la zone nommée "imgSignature" des traits plus ou mons aléatoires, ensuite je veux sauver ce qu'il y a dedans dans un BMP.
    Le souci c'est que au premier clic sur le bouton, le BMP ne contient qu'une partie de l'image.
    Si je clique de nouveau dessus : tout est OK.

    Je sèche un peu et j'ai essayé pas mal de choses...

    Je vous laisse mon code de clic de bouton si jamais vous avez 5 minutes pour regarder.. ca devrait être simple pour des habitués...

    Merci énormément d'avance



    la fenetre s'appelle "mainwindow"

    la "scene" est déclarée dans "mainwindow.h"
    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
     
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
     
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
     
    private slots:
        void on_btnTest01_clicked();
        void drawLine(QGraphicsScene *scene, int startX, int startY, int endX, int endY);
     
    private:
        Ui::MainWindow *ui;
        QGraphicsScene *scene;
    dans le "mainwindow.cpp"


    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
     
     
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
        ui->setupUi(this);
     
        scene = new QGraphicsScene(this);
        //scene = new QGraphicsScene(ui->imgSignature);
        // = new QGraphicsScene();
     
        ui->imgSignature->setScene(scene);
        pen1.setColor(Qt::black);
    }
     
     
     
    void MainWindow::on_btnTest01_clicked() {
     
        QString fileName;
        QPointF pStart;
        QPointF pEnd;
     
        pen1.setWidth(1);
     
        // effacer la scene (image)
        scene->clear();
        drawLine(scene,0,0,0,0);
     
        int i;
        int rnd;
        int H,L;
        H = 240;
        L = 0 ;
        pStart.setX(0);
        pStart.setY(0);
        for (i=1 ; i<ui->imgSignature->width(); i=i+5) {
            rnd = qrand() % ((H + 1) - L) + L;
            pEnd.setX(i);
            pEnd.setY(rnd);
            drawLine(scene, pStart.x(), pStart.y(), pEnd.x() , pEnd.y());
            pStart = pEnd;
     
        }
        drawLine(scene,0,0,0,0);
        ui->imgSignature->setScene(scene);
     
        QRect imgSel;
        imgSel.setRect(0,0,320,240);
     
        QPixmap pic;
        pic.fill();
        pic = ui->imgSignature->grab(imgSel);
     
        fileName = sNomFichierBMP;
        QFile::remove(fileName);
        QThread::msleep(500);
     
        pic.save(fileName,"BMP");
    }

    En fait c'est comme si au premier clic, le QPixmap enregistrait la zone 320x240 de la fenêtre et non du QGraphicsView.. mais pas au deuxième clic...

    Merci encore du temps que vous prendrez.

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 2
    Par défaut
    Je me réponds à moi même car j'ai trouvé la solution.

    j'ai rajouté une instruction ProcessEvents...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        ui->imgSignature->setScene(scene);
        qApp->processEvents();
        QThread::msleep(100);
    Et voila le travail....

    Si ca peut servir à d'autres...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2015, 10h57
  2. Enregistrement Image bmp 8bits
    Par garfieldlcht dans le forum VB.NET
    Réponses: 8
    Dernier message: 30/01/2014, 11h53
  3. Enregistrer une image bmp dans une matrice
    Par Mounr dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/04/2007, 23h54
  4. Impression d'image bmp
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2002, 09h38
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 16h04

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