I. Résultat▲
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.
#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
#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.
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.
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.
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 }
}
}