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"
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 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;
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.
Partager