[C++ Qt] Notifications Windows - Systra (System Tray)

Statut
N'est pas ouverte pour d'autres réponses.
D

delete221380

Yop all c'est DEVR0, aujoud'hui on ce retrouve pour un nouveau tuto en C++ avec Qt, le but de ce tutoriel va être de vous montrer comment reproduire les messages de notifications Windows par type, a savoir les message d'information, d'erreur et d'attention.


Commençons par ce qu'il vous faut :
  • Qt
  • Des bases en C++
  • Posséder un semblant de cerveau :trollface:
Lancez Qt, créer un nouveau projet, prendre Qt Applications, nommer le comme bon vous semble, choisissez Widget au lieu de MainApplication puisque nous ne voulons pas de la barre de statut ni de toolbar.

1398206161-systra.png

Une fois ceci fait rendez vous sur votre formulaire et ajouter les composants que vous souhaiter.


I- Afficher une icone personnalisé dans la barre des notifications


Pour ma part j'ai ajouter les composants suivants :
  • LineEdit
  • SpinBot
  • TextEdit
  • PushButton
  • ComboBox
  • GroupBox

Voilà a quoi ça va ressemblé :

1398206977-ststra2.png


/!\ A vous d'ajouter les 3 types de messages en Item dans la ComboBox /!\

Ensuite une fois ceci fait, rendez vous dans les propriété de la SpinBox, chercher la propriété Sufix et ajouter-y "ms". Réglé la valeur maximal par 60 000 et la valeur par défaut 15000 (exemple) c'est des milliseconde ce qui signifie que la durée d'affichage du message sera égale a 15 secondes.

Ensuite rendez vous dans votre code.cpp, pour ma part c'est Widget.cpp, vous pouvez voir que vous avez déjà ça de fait
Code:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

}

Widget::~Widget()
{
    delete ui;
}

Vous devez créer une classe, ajouter simplement
Code:
notifyIcon=newQSystemTrayInfo(this);
en dessous de ui->setupUI(this).


Rendez vous dans votre Header (En-tête) il faut déclaré l'utilisation de la classe QSystemTray par un #include
Il suffit d'ajouter
Code:
#include <QSystemTrayIcon>

Ensuite il faut aussi ajouter dans l'en-tête au niveau de la class Widget dans Private ceci :
Code:
 QSystemTrayIcon *notifyIcon;

Si tout ce passe bien vous n'avez aucune erreur, et votre en tête ressemblera donc a ceci

1398207762-enteteystra.png

Ensuite rendez vous dans votre code.cpp (widget.cpp) et en dessous de notifyIcon=newQSystemTrayIcon(his); nous allons ajouter d'autre choses pour pouvoir avoir une icone.


Nous allons ajouter une méthode "setIcon" qui prendra comme argument (QIcon) qui lui même est un objet
Comme ceci :
Code:
notifyIcon->setIcon(QIcon());
Entre les () de QIcon il faut renseigné une chaine de caractères qui est en faite le chemin d'un fichier, ce sera l'icone a afficher dans la barre des notification, il suffit d'allez dans le dossier du projet et d'ajouter un fichier en .png et entre les parenthèse vous rajouterez "lenomdelimage.png".


La nous avons définit une icone a affiché, cependant elle ne s'affichera pas puisqu'uon ne lui a pas dis, pour ce faire allez sur votre bouton "Afficher l'icone" > Clique droit > Allez au slot > Clicked()
Vous allez avoir le morceaux de code avec une fonction void créer
dans la fonction créer ajouter simplement
Code:
notifyIcon.Show();
C'étais très difficile :trollface:

Ensuite vous pouvez déjà essayé, debugger votre logiciel et cliquez sur Activer l'icone, vous allez pouvoir apercevoir l'icone que vous avez choisit en image dans votre barre d'icone

1398208715-systra-3.png


Pour le code du bouton "masquer Icone" c'est similaire
Code:
  notifyIcon->hide();


II- Afficher un message et un titre personnalisé ainsi qu'un type de notifications

Pour choisir votre message, rendez vous sur votre bouton "Afficher Message" > Clique droit > Allez au slot > Clicked()

Une fois dans le code vous allez encore vous reservir de la classe notifyIcon mais cette fois-ci nous allons remployé la méthodes showMessage();
Vous pouvez voir par vous même le type d'argument demander par cette méthodes, il nous demande : Le titre, le contenu du message, le type de message et une durée en milliseconde (vous comprenez l'interêt du spinBox avec le suffix MS)

1398209176-fovvcea.png

Pour simplifié la ligne avec la méthode showmessage nous allons nous même déclarer des variables au dessus

Dans le code du bouton nous allons faire un switch pour les 3 différents type de message
Je vous donne le code complet avec les variable, vous n'avez qu'à remplacer le nom des composants

Code:
QString titre = ui->lineEdit->text();
    QString texte = ui->textEdit->toPlainText();
    qint8 temps = ui->spinBox->value();

    switch(ui->comboBox->currentIndex())
    {
        case 0:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Information, temps);
        break;
        case 1:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Warning, temps);
        break;
        case 2:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Critical, temps);
        break;
    }
Vous devriez avoir quelques choses de similaires

1398210654-systra5.png


Une fois ceci fait, compilé votre projet et testé par vous même, voici le résultat

1398210482-systra4.png



/!\ Ce tutoriel est maintenant achevé, merci de ne pas copier/collé sans crédits /!\​
 

ItsAxys

The Legend.
Premium
Inscription
6 Janvier 2013
Messages
865
Réactions
340
Points
1 093
Yop all c'est DEVR0, aujoud'hui on ce retrouve pour un nouveau tuto en C++ avec Qt, le but de ce tutoriel va être de vous montrer comment reproduire les messages de notifications Windows par type, a savoir les message d'information, d'erreur et d'attention.


Commençons par ce qu'il vous faut :
  • Qt
  • Des bases en C++
  • Posséder un semblant de cerveau :trollface:
Lancez Qt, créer un nouveau projet, prendre Qt Applications, nommer le comme bon vous semble, choisissez Widget au lieu de MainApplication puisque nous ne voulons pas de la barre de statut ni de toolbar.

1398206161-systra.png

Une fois ceci fait rendez vous sur votre formulaire et ajouter les composants que vous souhaiter.


I- Afficher une icone personnalisé dans la barre des notifications


Pour ma part j'ai ajouter les composants suivants :
  • LineEdit
  • SpinBot
  • TextEdit
  • PushButton
  • ComboBox
  • GroupBox

Voilà a quoi ça va ressemblé :

1398206977-ststra2.png


/!\ A vous d'ajouter les 3 types de messages en Item dans la ComboBox /!\

Ensuite une fois ceci fait, rendez vous dans les propriété de la SpinBox, chercher la propriété Sufix et ajouter-y "ms". Réglé la valeur maximal par 60 000 et la valeur par défaut 15000 (exemple) c'est des milliseconde ce qui signifie que la durée d'affichage du message sera égale a 15 secondes.

Ensuite rendez vous dans votre code.cpp, pour ma part c'est Widget.cpp, vous pouvez voir que vous avez déjà ça de fait
Code:
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

}

Widget::~Widget()
{
    delete ui;
}

Vous devez créer une classe, ajouter simplement
Code:
notifyIcon=newQSystemTrayInfo(this);
en dessous de ui->setupUI(this).


Rendez vous dans votre Header (En-tête) il faut déclaré l'utilisation de la classe QSystemTray par un #include
Il suffit d'ajouter
Code:
#include <QSystemTrayIcon>

Ensuite il faut aussi ajouter dans l'en-tête au niveau de la class Widget dans Private ceci :
Code:
 QSystemTrayIcon *notifyIcon;

Si tout ce passe bien vous n'avez aucune erreur, et votre en tête ressemblera donc a ceci

1398207762-enteteystra.png

Ensuite rendez vous dans votre code.cpp (widget.cpp) et en dessous de notifyIcon=newQSystemTrayIcon(his); nous allons ajouter d'autre choses pour pouvoir avoir une icone.


Nous allons ajouter une méthode "setIcon" qui prendra comme argument (QIcon) qui lui même est un objet
Comme ceci :
Code:
notifyIcon->setIcon(QIcon());
Entre les () de QIcon il faut renseigné une chaine de caractères qui est en faite le chemin d'un fichier, ce sera l'icone a afficher dans la barre des notification, il suffit d'allez dans le dossier du projet et d'ajouter un fichier en .png et entre les parenthèse vous rajouterez "lenomdelimage.png".


La nous avons définit une icone a affiché, cependant elle ne s'affichera pas puisqu'uon ne lui a pas dis, pour ce faire allez sur votre bouton "Afficher l'icone" > Clique droit > Allez au slot > Clicked()
Vous allez avoir le morceaux de code avec une fonction void créer
dans la fonction créer ajouter simplement
Code:
notifyIcon.Show();
C'étais très difficile :trollface:

Ensuite vous pouvez déjà essayé, debugger votre logiciel et cliquez sur Activer l'icone, vous allez pouvoir apercevoir l'icone que vous avez choisit en image dans votre barre d'icone

1398208715-systra-3.png


Pour le code du bouton "masquer Icone" c'est similaire
Code:
  notifyIcon->hide();


II- Afficher un message et un titre personnalisé ainsi qu'un type de notifications

Pour choisir votre message, rendez vous sur votre bouton "Afficher Message" > Clique droit > Allez au slot > Clicked()

Une fois dans le code vous allez encore vous reservir de la classe notifyIcon mais cette fois-ci nous allons remployé la méthodes showMessage();
Vous pouvez voir par vous même le type d'argument demander par cette méthodes, il nous demande : Le titre, le contenu du message, le type de message et une durée en milliseconde (vous comprenez l'interêt du spinBox avec le suffix MS)

1398209176-fovvcea.png

Pour simplifié la ligne avec la méthode showmessage nous allons nous même déclarer des variables au dessus

Dans le code du bouton nous allons faire un switch pour les 3 différents type de message
Je vous donne le code complet avec les variable, vous n'avez qu'à remplacer le nom des composants

Code:
QString titre = ui->lineEdit->text();
    QString texte = ui->textEdit->toPlainText();
    qint8 temps = ui->spinBox->value();

    switch(ui->comboBox->currentIndex())
    {
        case 0:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Information, temps);
        break;
        case 1:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Warning, temps);
        break;
        case 2:
        notifyIcon->showMessage(titre, texte, QSystemTrayIcon::Critical, temps);
        break;
    }
Vous devriez avoir quelques choses de similaires

1398210654-systra5.png


Une fois ceci fait, compilé votre projet et testé par vous même, voici le résultat

1398210482-systra4.png



/!\ Ce tutoriel est maintenant achevé, merci de ne pas copier/collé sans crédits /!\​
Long et compliquer pour rien , faits juse use notifyicon et hop. lol
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut