FAQ Qt

Qt fournit la classe QDesktopServices
et en particulier la fonction statique
QDesktopServices::openUrl,
qui permet d'interagir avec les applications associées par défaut. Elle peut être étendue si nécessaire pour ajouter
ses propres handlers pour un schéma donné.
#include
<QtGui>
class
MyQPushButton : public
QPushButton
{
public
:
MyQPushButton(const
QString
&
text,const
QString
&
url, QWidget
*
parent =
0
)
:
QPushButton
(text,parent) , m_url(url)
{
resize(75
, 30
);
setFont(QFont
("Times"
, 18
, QFont
::
Bold));
}
;
virtual
void
mouseReleaseEvent ( QMouseEvent
*
event )
{
QDesktopServices
::
openUrl(m_url);
}
private
:
QString
m_url;
}
;
int
main(int
argc, char
*
argv[])
{
QApplication
app(argc, argv);
QWidget
w;
MyQPushButton bouton1(" Ouvrir DVP / Qt"
,"http://qt.developpez.com"
,&
w);
MyQPushButton bouton2("Ouvrir fichier txt"
,"c:/test.txt"
,&
w);
MyQPushButton bouton3("Envoyer mail"
,"mailto:qt@dvp.com?subject=test envoie mail"
,&
w);
QVBoxLayout
vl(&
w);
vl.addWidget(&
bouton1);
vl.addWidget(&
bouton2);
vl.addWidget(&
bouton3);
w.show();
return
app.exec();
}
Grâce à la classe QDesktopWidget,
il est possible de récupérer la résolution d'écran de l'utilisateur.
QApplication::desktop(),
une fonction permettant d'obtenir l'instance de QDesktopWidget
correspondant à ce qu'on appelle le widget de bureau, a été utilisée dans l'exemple ci-dessous mais aurait tout autant pu
être remplacée par une instanciation explicite d'un objet
QDesktopWidget.
int
largeur =
QApplication
::
desktop()->
width();
int
hauteur =
QApplication
::
desktop()->
height();
Comme le dit la documentation, les fonctions width()
et height() sont utilisables ici,
car QDesktopWidget hérite de
QWidget.
Il aurait aussi été possible de passer par la fonction
screenGeometry(),
appartenant aussi à QDesktopWidget,
qui retourne un QRect pour récupérer la résolution d'écran,
ce qui aurait pour avantage de pouvoir retourner la résolution de chaque écran.
Le fait que cette fonction retourne un QRect
permettrait, dans le cas où l'on serait passé par la méthode avec les fonctions
width()
et height(), de retourner les valeurs recherchées.
Qt, depuis sa version 4.2, permet, grâce à la classe
QSystemTrayIcon,
de créer facilement des programmes ayant une entrée dans la zone de notification.
Cela se fait à l'aide des quelques méthodes suivantes :
- void setIcon
(const QIcon & icon) :
permet d'appliquer une image qui servira d'icône dans la zone de notification ;
- void setContextMenu
(QMenu * menu) :
permet l'ajout d'un menu quand on fait un click droit sur l'icône se trouvant dans la zone de notification ;
- void showMessage
(const QString & title,
const QString & message,
MessageIcon icon =
Information,
int millisecondsTimeoutHint = 10000) :
permet l'affichage d'un popup dans la zone de notification.
#include >QApplication>
#include
<QSystemTrayIcon>
#include
<QMenu>
#include
<QPushButton>
#include
<QHBoxLayout>
class
SysTray : public
QWidget
{
Q_OBJECT
private
:
QSystemTrayIcon
*
m_SystIcon;
QPushButton
*
m_Bouton_Message;
public
:
SysTray()
{
this
->
m_Bouton_Message =
new
QPushButton
("Affiche text"
,this
);
QHBoxLayout
*
layout =
new
QHBoxLayout
();
layout->
addWidget(m_Bouton_Message);
this
->
setLayout(layout);
m_SystIcon =
new
QSystemTrayIcon
(this
);
QMenu
*
sysTrayMenu =
new
QMenu
(this
);
QAction
*
hide =
new
QAction
("Hide"
,this
);
QAction
*
show =
new
QAction
("Show"
,this
);
QAction
*
quit =
new
QAction
("Quit"
,this
);
sysTrayMenu->
addAction(hide);
sysTrayMenu->
addAction(show);
sysTrayMenu->
addAction(quit);
m_SystIcon->
setContextMenu(sysTrayMenu);
QIcon
unIcon("windows.png"
);
m_SystIcon->
setIcon(unIcon);
m_SystIcon->
show();
connect
(quit, SIGNAL
(triggered()), this
, SLOT
(close()));
connect
(show, SIGNAL
(triggered()), this
, SLOT
(show()));
connect
(hide, SIGNAL
(triggered()), this
, SLOT
(hide()));
connect
(m_Bouton_Message, SIGNAL
(clicked(bool
)), this
, SLOT
(Affiche(bool
)));
}
private
slots
:
void
Affiche(bool
valid)
{
m_SystIcon->
showMessage
(
"Bravo !"
,
"Vous venez de créer une application dans la zone de notification !"
);
}
}
;
#include
"main.moc"
int
main(int
argc, char
*
argv[])
{
QApplication
a(argc, argv);
SysTray w;
w.show();
return
a.exec();
}
Remarque : La méthode showMessage()
(arrivée à partir de Qt 4.3), qui fait apparaître une infobulle, est dépendante des paramètres de l'OS.
Lien : QSystemTrayIcon :
ajoutez votre programme à la zone de notification avec Qt
Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur.
Copyright © 2006 - 2017 Developpez LLC.
Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne
peut être faite de ce site ni de l'ensemble de son contenu : textes, documents
et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez
selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.