• Bienvenue à tous sur HackandModz !
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.
Rejeter la notice
Visiteur,
Bienvenue sur Hack & Modz

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

Discussion dans 'C++' créé par iDEVR0™, Mai 2, 2014.

  • 1,356 2
    1. iDEVR0™

      iDEVR0™ Visiteur

      Membre non noté

      0/5,
      Hors Ligne
      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 :troll:
      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.

      [​IMG]
      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é :

      [​IMG]

      :!: 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

      [​IMG]
      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 :troll::troll:

      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

      [​IMG]
      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)

      [​IMG]
      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

      [​IMG]


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

      [​IMG]

      :!: Ce tutoriel est maintenant achevé, merci de ne pas copier/collé sans crédits :!:
       
      • J'aime J'aime x 1
    2. Google AdSense Publicités Publicités

  • C++

    C++ Visiteur

    Membre non noté

    0/5,
    Hors Ligne
  • Fils de X-YOYE-X | Ryad

    Fils de X-YOYE-X | Ryad Visiteur

    Membre non noté

    0/5,
    Hors Ligne
    Merci pour le tuto si tu peut passer skype ;)