IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

QML et le changement du curseur

Un petit tutoriel pour montrer comment changer le curseur de la souris lors du survol d'un bouton dans une application Qt mixte C++/QML.

Il n'existe apparemment pas de fonction QML pour changer le curseur de l'application, on le fera donc manuellement.

Commentez !

Article lu   fois.

Les deux auteurs

Profil Pro

Profil Pro

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Résultat

Image non disponible

II. Bibliothèque C++

On crée une classe nommée Biblio. Dans cette classe, on crée une méthode AfficheCurseur qui récupère le nom du curseur et qui affiche le curseur correspondant.

biblio.h
Sélectionnez
#ifndef BIBLIO_H 
#define BIBLIO_H 
#include <QObject> 
#include <qdeclarative.h> 
 
class Biblio : public QObject 
{ 
  Q_OBJECT 
public: 
  explicit Biblio(QObject *parent = 0); 
  Q_INVOKABLE void AfficheCurseur(QString); 
signals: 
public slots: 
 
}; 
#endif // BIBLIO_H
biblio.cpp
Sélectionnez
#include "biblio.h" 
#include <QtGui/QApplication> 
#include <QCursor> 
 
Biblio::Biblio(QObject *parent) : 
  QObject(parent) 
{ 
} 
void Biblio::AfficheCurseur(QString typeCurseur) 
{ 
  QCursor curseur; 
  if(typeCurseur.toUpper() == "HAND") 
  curseur = QCursor(Qt::PointingHandCursor); 
  else 
  curseur = QCursor(Qt::ArrowCursor); 
  QApplication::setOverrideCursor(curseur); 
}

III. Connexion C++ vers QML

Pour rendre accessible la méthode AfficheCurseur en QML, il faut référencer un objet Biblio dans l'objet QDeclarativeView.

Dans le fichier MainWindow.h, on crée un objet Biblio.

 
Sélectionnez
private: 
  QDeclarativeView *ui; 
  Biblio biblio;

Dans le fichier MainWindow.cpp, on ajoute la référence de l'objet Biblio sur le contexte du QDeclarativeView. Dans mon code QML, il sera appelable par le nom donné dans la méthode setContextProperty.

 
Sélectionnez
ui->rootContext()->setContextProperty("Biblio", &biblio);

IV. Création du composant Bouton

On s'appuie sur les boutons de l'exemple fourni dans le Qt SDK.

On crée un fichier QML nommé Bouton.qml. Dans ce bouton, on crée une surface de capture d'événement de la souris MouseArea. Sur cette surface, on se connecte au signal onEntered et onExited qui respectivement capture l'entrée et la sortie du la souris sur la surface d'exposition. Attention, la propriété hoverEnabled doit être active, sinon l'événement est appelé uniquement lors du clic de la souris.

Sur ces signaux, on appelle la fonction AfficheCurseur de l'objet Biblio.

 
Sélectionnez
import Qt 4.7 
BorderImage { 
  id: button 
  property alias text: buttonText.text 
  property alias font: buttonText.font 
  property string color: "" 
  property string hint: "" 
  property int bordure: 8; 
  property int tag: 0; 
  signal boutonClick(int idBouton) 
  source: "images/button-" + color + ".png"; clip: true 
  border { left: 10; top: 10; right: 10; bottom: 10 } 
  width: buttonText.width + bordure*2; 
  
  Rectangle { 
    id: shade 
    anchors.fill: button; radius: 10; color: "black"; opacity: 0 
  } 
  Text { 
    id: buttonText 
    anchors.centerIn: parent; anchors.verticalCenterOffset: -1 
    font.pixelSize: 20; 
    style: Text.Sunken; color: "white"; styleColor: "black"; smooth: true 
  } 
  MouseArea { 
    id: mouseArea 
    anchors.fill: parent 
    hoverEnabled: true 
    onClicked: { 
    button.boutonClick(button.tag) 
  } 
  onEntered: { 
    Biblio.AfficheCurseur("hand") 
  } 
  onExited: { 
    Biblio.AfficheCurseur("none") 
  } 
  } 
  states: State { 
    name: "pressed"; when: mouseArea.pressed == true 
    PropertyChanges { target: shade; opacity: .4 } 
  } 
 }

V. Remerciements

Merci à dourouc05 et à eusebe19 pour leur relecture !

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2011 Guillaume Fortin. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.