Utilisation de abuleduboutonv0¶
Objectif:- Avoir des boutons graphiques
- Avoir des "zones sensibles" rectangulaires + rotation
- Dans une version future avoir des zones sensibles en forme polygonales (ou mieux)
- Associer une animation à un bouton pour qu'il puisse se déplacer (utile si c'est une image pour calapa par exemple)
- Associer une 2° image pour l'état "bouton sélectionné" (ou bouton cliqué, c'est vous qui implémentez la méthode)
- Associer un drag & drop possible
- Application de tests et de démonstration:
bzr branch sftp://redmine.ryxeo.com/home/groupes/developpeurs/leterrier/leterrier-developpeu/abuleduboutonv0-test cd abuleduboutonv0-test bzr branch sftp://redmine.ryxeo.com/home/groupes/developpeurs/leterrier/leterrier-developpeu/abuleduboutonv0
Bouton + rotation + animation¶
QGraphicsScene* dessin = new QGraphicsScene(this);
m_ui->grvVue->setScene(dessin);
//Positionne l'origine des objets ajoutés dans le QGraphicsView avec le (0,0) en haut à gauche...
//... il est au centre du QGraphicsView sinon
m_ui->grvVue->setAlignment(Qt::AlignLeft | Qt::AlignTop);
AbulEduBoutonV0* bouton = new AbulEduBoutonV0("Bonjour");//,m_ui->grvVue);
bouton->QGraphicsItem::setCursor(Qt::PointingHandCursor);
bouton->setImage(QPixmap("./will-let.png"));
bouton->rotate(45);
//bouton->QPushButton::setCursor(Qt::PointingHandCursor);
dessin->addItem(bouton);
AbulEduBoutonV0* bouton2 = new AbulEduBoutonV0("Hello");//,m_ui->grvVue);
bouton2->QGraphicsItem::setCursor(Qt::PointingHandCursor);
// bouton2->QPushButton::setCursor(Qt::PointingHandCursor);
bouton2->setImage(QPixmap("./will-win.png"));
dessin->addItem(bouton2);
connect(bouton2,SIGNAL(clicked()),this,SLOT(Bonjour_clicked()));
//Anime le bouton
QPropertyAnimation* animation = new QPropertyAnimation(bouton,"pos");
animation->setDuration(3000);
animation->setKeyValueAt(0,QPoint(10,10));
animation->setKeyValueAt(0.25,QPoint(100,50));
animation->setKeyValueAt(0.5,QPoint(150,0));
animation->setKeyValueAt(0.75,QPoint(75,50));
animation->setKeyValueAt(1,QPoint(10,10));
//animation->setStartValue(QPoint(0,0));
//animation->setEndValue(QPoint(300,0));
animation->start();
Bouton à deux états¶
Si vous voulez "marquer" votre lapin (toujours dans calapa) lorsque vous cliquez dessus il suffit d'associer un slot au signal clicked et d'utiliser la 2° image
QGraphicsScene* dessin2 = new QGraphicsScene(this);
m_ui->grvChangeEtat->setScene(dessin2);
AbulEduBoutonV0* bouton2a = new AbulEduBoutonV0("ChangeImage");
bouton2a->QGraphicsItem::setCursor(Qt::PointingHandCursor);
bouton2a->setImageNormal(QPixmap("./will-let.png"));
bouton2a->setImageSelect(QPixmap("./will-win.png"));
//bouton->QPushButton::setCursor(Qt::PointingHandCursor);
dessin2->addItem(bouton2a);
connect(bouton2a,SIGNAL(clicked()),this,SLOT(ChangeImage()));
.../...
void MainWindow::ChangeImage()
{
//On sait qu'on a clique sur un AbulEduBoutonV0 ... on peut donc le caster sans soucis
AbulEduBoutonV0 * btn = static_cast<AbulEduBoutonV0 * >(sender());
if(m_numimage == 0)
m_numimage = 1;
else
m_numimage = 0;
btn->switchImage(m_numimage);
}
Drag & Drop "basique"¶
QGraphicsScene* dessin3 = new QGraphicsScene(this);
m_ui->grvDragAndDrop->setScene(dessin3);
AbulEduBoutonV0* bouton3a = new AbulEduBoutonV0("Drag");
bouton3a->QGraphicsItem::setCursor(Qt::PointingHandCursor);
bouton3a->setImageNormal(QPixmap("./will-let.png"));
bouton3a->setPos(50,50);
bouton3a->setDragAndDrop(true);
dessin3->addItem(bouton3a);
AbulEduBoutonV0* bouton3b = new AbulEduBoutonV0("Drop");
bouton3b->QGraphicsItem::setCursor(Qt::PointingHandCursor);
bouton3b->setPos(10,10);
bouton3b->setDebug(true);
bouton3b->resize(50,50);
bouton3b->setDragAndDrop(true);
bouton3b->setHighlightColor("#aeffff");
dessin3->addItem(bouton3b);
Drag & Drop "évolué"¶
Peut-être que vous voulez faire plusieurs catégories de bouton drag & drop, par exemple une série de boutons "vide" mais qui n'accepterait que des lapins et une autre série de boutons "vides" qui n'accepteraient que des éléphants... c'est la propriété setDragMimeCode qu'il faut utiliser en ce cas. Dans l'exemple ci-dessous la zone "Elephant1Destination" n'acceptera pas les objets provenant d'un drag & drop dont l'origine serait autre chose qu'un elephant.
AbulEduBoutonV0* boutonED0 = new AbulEduBoutonV0("Elephant1Destination");
boutonED0->setDragAndDrop(true);
boutonED0->setDragMimeCode("elephant");
AbulEduBoutonV0* boutonL0 = new AbulEduBoutonV0("Lapin1");
boutonL0->setDragAndDrop(true);
boutonL0->setDragMimeCode("lapin");
AbulEduBoutonV0* boutonLD0 = new AbulEduBoutonV0("Lapin1Destination");
boutonLD0->setDragAndDrop(true);
boutonLD0->setDragMimeCode("lapin");
Drag & Drop "déplacement" ou "copie"¶
Il peut-être intéressant d'avoir des drag & drop en mode copie et d'autres en mode déplacement.
// ============== Exemple de bouton texte à déplacer
AbulEduBoutonV0* bouton = new AbulEduBoutonV0("TexteSource");
bouton->setCursor(Qt::PointingHandCursor);
bouton->setDragAndDrop(true);
bouton->setDragAndDropMode(Qt::MoveAction);
bouton->setPlainText(trUtf8("déplace"));
bouton->setDragMimeCode("TypeDeBoutonTexte");
bouton->setPos(0,0);
dessin->addItem(bouton);
AbulEduBoutonV0* bouton2 = new AbulEduBoutonV0("TexteDestination");
bouton2->setCursor(Qt::PointingHandCursor);
bouton2->setDragAndDrop(true);
bouton2->setPos(0,100);
bouton2->setPlainText("");
bouton2->setDragMimeCode("TypeDeBoutonTexte");
bouton2->setDebug(true);
dessin->addItem(bouton2);
// ============== Exemple de bouton texte à copier
bouton = new AbulEduBoutonV0("TexteSource2");
bouton->setCursor(Qt::PointingHandCursor);
bouton->setDragAndDrop(true);
bouton->setDragAndDropMode(Qt::CopyAction);
bouton->setPlainText("copie");
bouton->setDragMimeCode("TypeDeBoutonTexte2");
bouton->setPos(100,0);
dessin->addItem(bouton);
bouton2 = new AbulEduBoutonV0("TexteDestination2");
bouton2->setCursor(Qt::PointingHandCursor);
bouton2->setDragAndDrop(true);
bouton2->setPos(100,100);
bouton2->setPlainText("");
bouton2->setDebug(true);
bouton2->setDragMimeCode("TypeDeBoutonTexte2");
dessin->addItem(bouton2);
// ============== Exemple de bouton image avec rollover + image qui suit à déplacer
bouton = new AbulEduBoutonV0("ImageSource");
bouton->setCursor(Qt::PointingHandCursor);
bouton->setImageNormal(QPixmap("/usr/share/icons/Tango/32x32/apps/browser.png"));
bouton->setImageRollOver(QPixmap("/usr/share/icons/Tango/32x32/apps/preferences-desktop-screensaver.png"));
bouton->resize(32,32);
bouton->setDragAndDrop(true);
bouton->setDragAndDropMode(Qt::MoveAction);
bouton->setDragMimeCode("TypeDeBoutonImage");
bouton->setPos(200,0);
dessin->addItem(bouton);
bouton2 = new AbulEduBoutonV0("ImageDestination");
bouton2->setCursor(Qt::PointingHandCursor);
bouton2->setDragAndDrop(true);
bouton2->setPos(200,100);
bouton2->setDragMimeCode("TypeDeBoutonImage");
bouton2->setDebug(true);
dessin->addItem(bouton2);