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_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
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);
 
}
Ce fameux rectangle s´appelle "square". Soyez indulgent, je ne suis pas un pro dans la programmation Qt Merci d´avance pour votre aide et bonne soirée