1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
| #include "FenPrincipale.h"
#include <QToolBar>
#include <QAction>
#include <QVBoxLayout>
#include <QWebView>
#include <QList>
#include <QSound>
#include <QSystemTrayIcon>
#include <QDebug>
FenPrincipale::FenPrincipale()
{
// Création de la barre d'outils
QToolBar *toolBarFichier = addToolBar("Quitter");
QAction *actionQuitter = toolBarFichier->addAction("&Quitter");
actionQuitter->setIcon(QIcon("quitter.png"));
toolBarFichier->addAction(actionQuitter);
connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit()));
// Définition de quelques propriétés de la fenêtre
setMinimumSize(700, 692);
setWindowTitle(tr("Bippeur EFVC"));
setStyleSheet("background-image: url(image.png)");
QWidget *page = new QWidget;
pageWeb = new QWebView;
QVBoxLayout *layout = new QVBoxLayout;
layout->setContentsMargins(0,0,0,0);
pageWeb->setMaximumSize(544, 545);
pageWeb->load(QUrl("http://emergency-3.forumactif.com/hotel-de-police-f28/"));
layout->addWidget(pageWeb, 0, Qt::AlignTop);
page->setLayout(layout);
this->setCentralWidget(page);
SysTray();
timer = new QTimer(this);
timer->setInterval(60000); // 60000 = 60 secondes = 1 minute
timer->start();
connect(timer, SIGNAL(timeout()), this, SLOT(actualiser()));
connect(pageWeb, SIGNAL(loadFinished(bool)), this, SLOT(analyserPage(bool)));
}
void FenPrincipale::actualiser()
{
pageWeb->page()->triggerAction(QWebPage::ReloadAndBypassCache);
}
void FenPrincipale::analyserPage(bool ok)
{
if (!ok)
return;
QString titre;
QWebElement document = pageWeb->page()->mainFrame()->documentElement();
// On recherche tous les éléments <tr> de la table du forum
QWebElementCollection lignesTableau = document.findAll("table.forumline tr");
foreach(QWebElement ligne, lignesTableau)
{
// On vérifie s'il y a une ligne de sujet (<h2 class="topic-title">)
QWebElement titre = ligne.findFirst("h2.topic-title");
if (titre.isNull()) // Si ce n'est pas le cas on passe à la suivante
continue;
// Le nombre de réponses est dans le premier <span class="postdetails">
QWebElement nombreReponses = ligne.findFirst("span.postdetails");
// On crée un objet Sujet et on l'ajoute à la liste
sujet << Sujet(titre.toPlainText(),nombreReponses.toPlainText().toInt() );
}
if (listeActuelle != sujet)
{
// on sauvegarde la nouvelle liste
listeActuelle = sujet;
QMessageBox::information(this, "Intervention", "A toutes les unités: intervenez !");
QSound::play("son.wav");
}
}
void FenPrincipale::SysTray()
{
// Création de l'objet gérant l'entrée dans la zone de notification
m_SystIcon = new QSystemTrayIcon(this);
// Création du menu qui apparaitra après un clic droit sur l'icône
QMenu* sysTrayMenu = new QMenu(this);
// Création des différentes actions pour le menu de la zone de notification
QAction* hide = new QAction("Hide",this);
QAction* show = new QAction("Show",this);
QAction* quit = new QAction("Quit",this);
// On ajoute nos actions au menu système
sysTrayMenu->addAction(hide);
sysTrayMenu->addAction(show);
sysTrayMenu->addAction(quit);
// On lie le menu avec l'icône
m_SystIcon->setContextMenu(sysTrayMenu);
// On charge l'image dans l'object icône
QIcon unIcon(QApplication::applicationDirPath() + "/icon.png");
// On place notre image dans la zone de notification
m_SystIcon->setIcon(unIcon);
// Affichage de l'icône dans la zone de notification
m_SystIcon->show();
// On ferme si la personne clique sur "Quit"
connect(quit, SIGNAL(triggered()), this, SLOT(close()));
// On affiche la fenêtre si la personne cliuqe sur "Show"
connect(show, SIGNAL(triggered()), this, SLOT(show()));
// On cache la fenêtre si la personne clique sur "Hide"
connect(hide, SIGNAL(triggered()), this, SLOT(hide()));
}
void FenPrincipale::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
if(reason == QSystemTrayIcon::DoubleClick)
{
// On affiche la fenêtre si la personne a double cliquer
connect(m_SystIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(show()));
}
} |
Partager