Bonjour/Bonsoir,
Après plus de 20h d´essais et de recherche sur internet, je me permets de venir vous demander de l´aide.
J´ai crée une interface graphique ayant pour but de bouger un rectangle dans un graphicsscene et d´éviter certains objets déjà présent. Pour la dernière opération, je dois récupérer les coordonnées du rectangle lors de chaque mouvement. C´est ici que ca coince et que j´ai besoin de votre aide.
Je vous mets mon code source.
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 #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); scene=new QGraphicsScene(this); ui->graphicsView->setScene(scene); scene->setSceneRect(QRectF(0,0,100,100)); ui->graphicsView->setAlignment(Qt::AlignTop | Qt::AlignLeft); scene->addEllipse(QRectF(100,50 , 3,3),QPen(Qt::red),QBrush(Qt::red)); scene->addEllipse(QRectF(125,220 , 2,2),QPen(Qt::red),QBrush(Qt::red)); scene->addEllipse(QRectF(300,230 , 3,3),QPen(Qt::red),QBrush(Qt::red)); scene->addEllipse(QRectF(100,100 , 3,3),QPen(Qt::red),QBrush(Qt::red)); scene->addRect(QRectF(130, 230, 40, 5), QPen(Qt::red), QBrush(Qt::red)); scene->addRect(QRectF(100, 100, -2, 50), QPen(Qt::red), QBrush(Qt::red)); square=new MySquare(); scene->addItem(square); ui->tableWidget->horizontalHeader()->resizeSection(0, 90); ui->tableWidget->horizontalHeader()->resizeSection(1, 100); ui->tableWidget->horizontalHeader()->resizeSection(2, 100); ui->tableWidget_2->horizontalHeader()->resizeSection(0, 90); ui->tableWidget_2->horizontalHeader()->resizeSection(1, 100); ui->tableWidget_2->horizontalHeader()->resizeSection(2, 100); for (int i=0;i<6;i++) { ui->tableWidget->verticalHeader()->resizeSection(i, 20); ui->tableWidget_2->verticalHeader()->resizeSection(i, 20); } qDebug()<< square->scenePos(); } Dialog::~Dialog() { delete ui; }
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 #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include <QtCore> #include <QtGui> #include <mysquare.h> #include <QDoubleSpinBox> #include <QPushButton> #include <QInputDialog> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; QGraphicsScene *scene; MySquare *square; }; #endif // DIALOG_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
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 #ifndef MYSQUARE_H #define MYSQUARE_H #include <Qpainter> #include <QGraphicsItem> #include <QDebug> #include <QPoint> #include <QCursor> #include <QInputDialog> #include <QLabel> class MySquare : public QGraphicsItem { public: MySquare(); MySquare *square; QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); bool Pressed; bool erreur; protected: void mousePressEvent(QGraphicsSceneMouseEvent *event); void mouseReleaseEvent(QGraphicsSceneMouseEvent *event); signals: void clicked(const QPoint&); }; #endif // MYSQUARE_HCe fameux rectangle s´appelle "square". Soyez indulgent, je ne suis pas un pro dans la programmation Qt
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
60
61
62
63
64
65
66
67
68
69
70
71 #include "mysquare.h" MySquare::MySquare() { Pressed=false; erreur=true; setFlag(ItemIsMovable); } QRectF MySquare::boundingRect() const { return QRectF(0,0,100,100); } void MySquare::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { QRectF rec = boundingRect(); QBrush brush (Qt::blue); if (Pressed) { brush.setColor(Qt::darkGray); } else { brush.setColor(Qt::gray); } painter->fillRect(rec,brush); painter->drawRect(rec); } void MySquare::mousePressEvent(QGraphicsSceneMouseEvent *event) { Pressed = true; QPoint *p = new QPoint(QCursor::pos()); // qDebug() << p->y(); update(); QGraphicsItem::mousePressEvent(event); } void MySquare::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { Pressed = false; update(); QGraphicsItem::mouseReleaseEvent(event); }Merci d´avance pour votre aide et bonne soirée
Partager