Bonsoir !
Je viens vers vous avec un prolème qui me dépasse.
J'ai une classe qui hérite de QGraphicsEllipseItem, ayant pour but de dessiner mes éllipses.
J'ai une seconde classe qui se sert de la premiere, et gère ma scene.
Mon problème:
1) J'aimerai pouvoir insérer un texte different dans chacun de mes ellipses
2) J'aimerai placer tous mes ellipses dans un QGraphicsGridLayout

Pour le premier cas, j'ai essayé de redéfinir la méthode "paint()" de ma classe héritant de QGraphicsEllipseItem. Sauf que quand j'insere le texte labas, seul ce text est affiché. Mes ellipses ne s'affichent plus du tout. Peut-être j'ai mal fait.

Pour le second problème, j'ai essayé de creer un QGraphicsProxyWidget et par la suite, appeler la méthode setWidget(). Sauf que je reçois une erreur du genre: <<cannot initialize a parameter of type 'QWidget*' with an lvalue of type 'MyEllipseItem'>>

Besoin de votre aide svp.
voici le code actuel
myellipseitem.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
 
#include <QObject>
#include <QWidget>
#include <QPen>
#include <QPainter>
#include <QStyleOptionGraphicsItem>
#include <QGraphicsEllipseItem>
#include <QGraphicsSimpleTextItem>
 
class MyEllipseItem : public QGraphicsEllipseItem
{
public:
    MyEllipseItem(qreal a, qreal b, qreal c, qreal d);
 
};
myellipseitem.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
#include "myellipseitem.h"
 
MyEllipseItem::MyEllipseItem(qreal a, qreal b, qreal c, qreal d)
    : QGraphicsEllipseItem(a, b, c, d)
{
    setBrush(QBrush(Qt::darkMagenta));
    setPen(QPen(Qt::blue));
    setCursor(Qt::PointingHandCursor);
 
}
widget.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
 
#include <QWidget>
#include <QObject>
#include <QGraphicsView>
#include <QGraphicsScene>
#include <QGraphicsItem>
#include <QLabel>
#include <QGraphicsGridLayout>
#include <QGraphicsLinearLayout>
#include <QGraphicsProxyWidget>
#include "myellipseitem.h"
 
namespace Ui {
class Widget;
}
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
 
private:
    Ui::Widget *ui;
    QGraphicsScene *m_scene;
};
widget.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
 
#include "widget.h"
#include "ui_widget.h"
#include <QGridLayout>
 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    m_scene = new QGraphicsScene();
    MyEllipseItem *ellipse1 = new MyEllipseItem(0, 0, 150, 120);
    ellipse1->setBrush(QBrush(Qt::magenta));
    //m_scene->addItem(ellipse1);
    //ellipse->setPos(-30, 0);
 
    MyEllipseItem *my_ellipse2 = new MyEllipseItem(0, 0, 150, 120);
    my_ellipse2->setBrush(QBrush(Qt::red));
    //m_scene->addItem(my_ellipse2);
    //my_ellipse->setPos(30, 0);
 
    MyEllipseItem *my_ellipse3 = new MyEllipseItem(0, 0, 150, 120);
    my_ellipse3->setBrush(QBrush(Qt::red));
    //m_scene->addItem(my_ellipse3);
    //my_ellipse->setPos(60, 0);
 
    MyEllipseItem *my_ellipse5 = new MyEllipseItem(0, 0, 150, 120);
    my_ellipse5->setBrush(QBrush(Qt::red));
    //m_scene->addItem(my_ellipse5);
    //my_ellipse->setPos(-60, 0);
 
    MyEllipseItem *my_ellipse4 = new MyEllipseItem(0, 0, 150, 120);
    my_ellipse4->setBrush(QBrush(Qt::red));
    //m_scene->addItem(my_ellipse4);
    //my_ellipse->setPos(60, 60);
 
 
    QGraphicsView *view = new QGraphicsView();
    view->setScene(m_scene);
    QGridLayout *layout = new QGridLayout;
    QGraphicsProxyWidget *proxy_test = new QGraphicsProxyWidget();
    proxy_test->setWidget(my_ellipse2); //cette ligne ne compile pas
    layout->addWidget(view);
    setLayout(layout);
 
}
 
Widget::~Widget()
{
    delete ui;
}
main.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
#include "widget.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
 
    return a.exec();
}