Modifier visuellement un Widget (exemple: tracer des traits dans un QListWidget)
Bonsoir, voilà mon problème :
_ Je dois creer un objet graphique qui comporte une suite d'éléments reliés par des traits et des fleches (un peu comme un graphcet ou un organigrame).
Je me suis donc dis que je vais créer un objet dérivant de QListWidget, et modifier (dans un premier temps pour faire des tests) le paintEvent de cet objet pour voir si je peux tracer dedans.
j'ai donc une classe myQListWidget (voici la déclaration) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| class myQListWidget : public QListWidget
{
Q_OBJECT
public:
myQListWidget(QWidget *parent = 0);
QSize minimumSizeHint() const;
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent *event);
}; |
et voilà sa définition :
Code:
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
| myQListWidget::myQListWidget(QWidget *parent)
: QListWidget(parent)
{
}
void myQListWidget::paintEvent(QPaintEvent * event)
{
QListWidget::paintEvent(event);
QPainter painter(this);
//----- Reglages préliminaires de la fenêtre de tracé -----//
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter.setBrush(QBrush(Qt::green, Qt::SolidPattern));
painter.drawRect(QRect(10,10,50,50));;
}
QSize myQListWidget::sizeHint() const
{
return QSize(400, 200);
}
QSize myQListWidget::minimumSizeHint() const
{
return QSize(100, 100);
} |
Pour testern j'ai ouvert designer, fait un nouveau Mainwindow et le membre que je lui ajoute est ma liste spéciale :
Code:
myQListWidget *liste;
voilà le constructeur du QMainWindow :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| drawingInList::drawingInList(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
// ajout de la liste
liste = new myQListWidget(centralWidget());
liste->addItem("test 1");
liste->addItem("test 2");
liste->addItem("test 3");
} |
Voilà, bien évidemment, à l'éxécution j'ai ma liste qui s'affiche mais c'est tout, je n'ai pas de dessin qui se fait à l'intérieur ...
Any idea ?