Cours:DiyWidgetQT : Différence entre versions
(→Principe) |
(→Principe) |
||
| Ligne 52 : | Ligne 52 : | ||
| − | On pourra ensuite ajouter un objet de ce type dans l'interface graphique | + | On pourra ensuite ajouter un objet de ce type dans l'interface graphique : |
| − | + | *soit en faisant une promotion comme [[Cours:HeritageWidgetQT|{{Rouge|cf sur cette page}}]] | |
| − | + | *soit en créant un attribut dans la classe MainWindow | |
| + | **modifier la déclaration de la classe MainWindow : | ||
<source lang=cpp> | <source lang=cpp> | ||
| + | // .h | ||
... | ... | ||
| − | |||
MonWidget monWidget | MonWidget monWidget | ||
... | ... | ||
| − | + | </source> | |
| + | **dans l'interface graphique : | ||
| + | ***ajouter un objet de type QWidget que l'on nommera {{Rouge|zoneWidget}} | ||
| + | ***ajouter un QPushButton dans ce zoneWidget | ||
| + | ***sélectionner zoneWidget et définir un {{Rouge|layout}} : | ||
| + | ****dans la barre d'icone en haut de l'écran | ||
| + | ****choisir "mettre en page horizontalement" | ||
| + | ***supprimer le QPushButton | ||
| + | **on peut alors ajouter l'objet monWidget dans zoneWidget : | ||
| + | <source lang=cpp> | ||
| + | // .cpp | ||
... | ... | ||
| − | + | ui->zoneWidget->layout()->addWidget(&monWidget); | |
| − | ui-> | ||
// ou | // ou | ||
setCentralWidget(&monWidget); | setCentralWidget(&monWidget); | ||
Version du 28 septembre 2025 à 19:57
Principe
Pour créer votre propre Widget, il convient de spécialiser la classe QWidget :
class MonWidget : public QWidget
{
Q_OBJECT
public:
MonWidget(QWidget *parent = nullptr);
signals:
};
Il suffit ensuite de redéfinir la méthode paintEvent qui est bien entendue déclarée comme virtual dans la classe QWidget !
protected:
void paintEvent(QPaintEvent *event) override;
Cette méthode ne sera pas appelée directement. On utilisera les méthodes update ou repaint au besoin !
On utilisera la classe QPainter pour faire le dessin du widget, ex :
void MonWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPainter painter(this);
QPen pen;
pen.setWidth(4);
pen.setColor(QColor(255,0,0));
painter.setBrush(QColor(0,220,220));
painter.setPen(pen);
painter.drawRect(10,10,width()-20,height()-20);
pen.setWidth(10);
pen.setColor(QColor(0,0,0));
painter.setBrush(QColor(0,200,0));
painter.setPen(pen);
QPointF centre(width()/2,height()/2);
painter.drawEllipse(centre,50,50);
}
On pourra ensuite ajouter un objet de ce type dans l'interface graphique :
- soit en faisant une promotion comme cf sur cette page
- soit en créant un attribut dans la classe MainWindow
- modifier la déclaration de la classe MainWindow :
// .h
...
MonWidget monWidget
...
- dans l'interface graphique :
- ajouter un objet de type QWidget que l'on nommera zoneWidget
- ajouter un QPushButton dans ce zoneWidget
- sélectionner zoneWidget et définir un layout :
- dans la barre d'icone en haut de l'écran
- choisir "mettre en page horizontalement"
- supprimer le QPushButton
- on peut alors ajouter l'objet monWidget dans zoneWidget :
- dans l'interface graphique :
// .cpp
...
ui->zoneWidget->layout()->addWidget(&monWidget);
// ou
setCentralWidget(&monWidget);
Ajout de fonctionnalité
- ajouter 4 boutons sur l'interface graphique
- haut
- bas
- gauche
- droite
- chaque appui sur un bouton permettra de déplacer la balle dans le sens indiqué