Bonjour à toutes et à tous,
Dans le cadre d'un projet professionnel, je dois réaliser la communication entre un programme Qt et son interface qui sera déporté sur une page web. Pour cela, je crée une instance unique de mon programme et je dialogue entre la page web et mon programme via QLocalServer et QLocalSocket. Dans un précédent post, on m'a expliquer comment faire mais j'ai des problèmes avec le code donc j'ai besoin de votre aide.
Tout d'abord voici les codes .h et .cpp que j'ai pour l'instant
SingleInstanceApplication.h
SingleInstanceApplication.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #ifndef SINGLEINSTANCEAPPLICATION_H #define SINGLEINSTANCEAPPLICATION_H #include "mainwindow.h" class SingleInstanceApplication : public QApplication { public: SingleInstanceApplication(int &argc, char **argv, const QString &uniqueKey); ~SingleInstanceApplication(); bool m_isMainInstance; private slots: void localServerHasNewConnexion(); void sendArgumentsToMainInstance(char **argv); void receiveData(); private: QLocalSocket *identificateurClient; QLocalServer *m_localServer; QLocalSocket *m_socket; }; #endif // SINGLEINSTANCEAPPLICATION_H
et voici les erreurs que j'ai et que je n'arrive pas à résoudre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include "mainwindow.h" #include "SingleApplication.h" #include "SingleInstanceApplication.h" #include <QThread> SingleInstanceApplication::SingleInstanceApplication(int &argc, char **argv, const QString &uniqueKey) : QApplication(argc, argv), m_isMainInstance(false) { m_socket = new QLocalSocket(); m_socket->connectToServer(uniqueKey); // on essaie de se connecter a un potentiel serveur local if(m_socket->waitForConnected(100)) { // ca a fonctionné... donc il existe deja une instance de notre logiciel qDebug("Une instance existe deja"); QThread::msleep(50); // ex: ca envoi "action_of_my_button" a l instance principale sendArgumentsToMainInstance(argv); // on ferme la connection. m_socket->close(); } else { // ca ne fonctionne pas, donc il n y a pas encore d instance principale... m_isMainInstance = true; qDebug("Aucune instance n'existe encore"); m_localServer = new QLocalServer(this); connect(m_localServer, SIGNAL(&QLocalServer::newConnection), this, SLOT(&SingleInstanceApplication::localServerHasNewConnexion())); m_localServer->listen(uniqueKey); } } void SingleInstanceApplication::localServerHasNewConnexion() { if(SIGNAL(QLocalServer::newConnection())) { //Si il y a une nouvelle connexion, on accepte la connexion sous la forme d'un QLocalSocket connecté //La fonction renvoie un pointeur sur un QLocalSocket qui peut être utilisé pour communiquer avec le client qDebug("Nouvelle Connexion"); identificateurClient = new QLocalSocket(); identificateurClient = QLocalServer::nextPendingConnection(); connect(identificateurClient, SIGNAL(readyRead()), this, SLOT(receiveData())); } } void SingleInstanceApplication::sendArgumentsToMainInstance(char **argv) { //Lorsque l'on appuit sur un bouton de l'interface web, par exemple le bouton pour allumer la LED1, cela doit //envoyer l'action d'appuyer sur le bouton pour allumer la LED1 QLocalSocket::writeData(argv, QLocalSocket::bytesAvailable(argv)); } void SingleInstanceApplication::receiveData() { QLocalSocket *Socket = new QLocalSocket::sender(); QLocalSocket *SocketDouVientLeSignal = qobject_cast<QLocalSocket *>(Socket); qint64 tailleMot = QLocalSocket::bytesAvailable(); SocketDouVientLeSignal->readData(argv, tailleMot); }
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\Projet Fusion 2\EssaiCommInternet\SingleInstanceApplication.cpp:45: erreur : cannot call member function 'virtual QLocalSocket* QLocalServer::nextPendingConnection()' without object
identificateurClient = QLocalServer::nextPendingConnection();
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\Projet Fusion 2\EssaiCommInternet\SingleInstanceApplication.cpp:55: erreur : no matching function for call to 'QLocalSocket::bytesAvailable(char**&)'
QLocalSocket::writeData(argv, QLocalSocket::bytesAvailable(argv));
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\Projet Fusion 2\EssaiCommInternet\SingleInstanceApplication.cpp:60: erreur : expected type-specifier
QLocalSocket *Socket = new QLocalSocket::sender();
C:\Qt\Qt5.1.1\Tools\QtCreator\bin\Projet Fusion 2\EssaiCommInternet\SingleInstanceApplication.cpp:62: erreur : cannot call member function 'virtual qint64 QLocalSocket::bytesAvailable() const' without object
qint64 tailleMot = QLocalSocket::bytesAvailable();
J'ai beau éplucher les différentes docs, je n'arrive pas à résoudre mes erreurs
Dans l'attente de votre aide,
Cordialement,
Clairetj
Partager