IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau Discussion :

Interface Web pour un logiciel Qt


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut Interface Web pour un logiciel Qt
    Bonjour à toutes et à tous,

    Je sollicite votre aide car je me heurte actuellement à un problème que je n'arrive pas à résoudre. Voici mon problème:

    Je viens de développer un petit logiciel grâce à Qt qui me permet de créer une communication série entre mon pc et un automate (via un câble USB/RS485) et qui me permet d'allumer des LEDs qui sont connectés sur les sorties TOR de mon automate. Mon logiciel marche parfaitement.

    Le but final de ce logiciel est de devenir un logiciel embarqué sur une carte Raspberry Pi (ayant linux comme OS) qui prendra le rôle de mon pc dans l'avenir. Sur cette carte, en plus de mon logiciel, est installé un serveur web embarqué (lighttpd). Maintenant, ce que je vais faire c'est qu'au lieu d'utiliser l'IHM que j'ai développé lors de la conception de mon logiciel, je veux utiliser une IHM que sera sur une page web et qui pourra faire exactement comme l'IHM "de base". Le problème c'est: comment faire ???

    Je suis ouvert à toutes les propositions

    Cordialement,
    Clairetj

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 256
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 256
    Par défaut interfaçage web
    Ca fait qq jours que je voit tes posts.

    Es-tu sûr que c'est Qt qu'il te faut, si c'est piloter ton port série via une interface http, de simples scripts cgi ne feraient t'ils pas l'affaire ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut
    Alors pour le choix de Qt, déjà, moi je fait une poursuite du projet de mon prédécesseur qui avait choisi Qt pour la portabilité (utilisable sur Linux, Windows, etc ...). Ensuite le programme que j'ai fait rester relativement simple parce que ce n'est qu'une "prise en main" pour trouver justement la solution de comment faire pour avoir une interface web parce que par la suite le programme sera beaucoup plus imposant et compliqué et ce programme sera lui aussi développé sous Qt, c'est pour cela que je souhaite garder Qt

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Rien ne sert de créer 3 posts... si des personnes ont des idées, ils les donneront.

    Bon, en gardant ton application Qt et en revenant sur ce que je t avais soumis dans l autre post.

    en gros, tu communiquerais avec ton application en appelant ton logiciel comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ./myprogram start_something
    ./myprogram end_something
    ./myprogram action_of_my_button
    Dans ton programme, tu t'arranges pour garder une seule instance.
    On peut faire ca avec QLocalServer et QLocalSocket.

    Dans ton main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        SingleInstanceApplication a("MY_SOFTWARE", argc, argv); //  MY_SOFTWARE = identifiant de ton application
     
        if(!a.isMainInstance()){
            qDebug() << "already launched";
            return 0;
        }
     
        ... sinon on continue ...
    Et pour le constructeur de class SingleInstanceApplication:
    (je te laisse cogiter sur les fonctions localServerHasNewConnection, sendArgumentsToMainInstance... et la fonction qui recoit les donnees (en utilisant le signal "readyRead") ... )
    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
    SingleInstanceApplication::SingleInstanceApplication(const QString &localName, int &argc, char **argv) :
        QApplication(argc, argv),
        m_isMainInstance(false)
    {
        m_socket = new QLocalSocket();
        m_socket->connectToServer(localName);
        // 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
            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;
            m_localServer = new QLocalServer(this);
            connect(m_localServer, &QLocalServer::newConnection, this, &SingleInstanceApplication::localServerHasNewConnection);
            m_localServer->listen(localName);
        }
    ...
    }
    Maintenant, évite de créer d'autres posts sur le meme sujet ... sinon les personnes qui recherchent la même chose que toi n'auront jamais leur réponse.

  5. #5
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut
    Citation Envoyé par RapotOR Voir le message

    Et pour le constructeur de class SingleInstanceApplication:
    (je te laisse cogiter sur les fonctions localServerHasNewConnection, sendArgumentsToMainInstance... et la fonction qui recoit les donnees (en utilisant le signal "readyRead") ... )

    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
     
    SingleInstanceApplication::SingleInstanceApplication(const QString &localName, int &argc, char **argv) :
        QApplication(argc, argv),
        m_isMainInstance(false)
    {
        m_socket = new QLocalSocket();
        m_socket->connectToServer(localName);
        // 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
            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;
            m_localServer = new QLocalServer(this);
            connect(m_localServer, &QLocalServer::newConnection, this, &SingleInstanceApplication::localServerHasNewConnection);
            m_localServer->listen(localName);
        }
    ...
    }
    Donc en plus de ma class MainWindow, je crée une nouvelle classe et c'est cette nouvelle classe qui va me permettre d'interférer avec ma page web c'est ça ?

  6. #6
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut
    Et comme tu me l'as demandé j'ai commencé à cogiter pour les fonctions localServerHasNewConnexion, sendArgumentsToMainInstance et je dois avouer que je galère vraiment. Voilà où j'en suis actuellement:

    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
     
    void SingleInstanceApplication::localServerHasNewConnexion()
    {
        if(QLocalServer::newConnection())
        {
            identificateurClient = new QLocalSocket();
            identificateurClient = QLocalServer::nextPendingConnection();
            nomClient = new QString();
            nomClient = QLocalServer::serverName();
        }
    }
     
     
    void SingleInstanceApplication::sendArgumentsToMainInstance(argv)
    {
        connect(bouton_interface_web, SIGNAL(&QLocalSocket::stateChanged), this, SLOT(bouton_interface_programme)); 
    }
    Je sais que j'aurais des erreurs (notamment avec sendArgumentsToMainInstance) mais à défaut de me donner la solution, est-ce que tu peux au moins me dire si il y a de l'idée dans ce que je fais ou si j'ai rien compris et que je vais dans le mur svp ?

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2009
    Messages
    383
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 383
    Par défaut
    Je ne vois pas trop à quoi serve les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nomClient = new QString();
    nomClient = QLocalServer::serverName();
    Sinon, a cet endroit; tu peux connecter le signal readyRead à un slot de ta classe. Ainsi l'instance principale (qui possede le QLocalServer) récupére l'info quand elle arrive.

    Dans ta fonction "sendArgumentsToMainInstance", j'aurais plutot envoyé les arguments (example : http://qt-project.org/doc/qt-5.0/qtc...e.html#write-2) comme un QIODevice vu que le QLocalSocket en hérite.

Discussions similaires

  1. Logiciel ou Interface Web pour la gestion d'un Active Directory
    Par the_ourson dans le forum Autres Solutions d'entreprise
    Réponses: 0
    Dernier message: 05/01/2010, 09h15
  2. Réponses: 10
    Dernier message: 03/03/2009, 11h04
  3. Interface web pour SQL Server
    Par malakoo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2006, 11h52
  4. Interface Web pour administrer NFS, FTP et Apache2
    Par Rekiem dans le forum Serveurs (Apache, IIS,...)
    Réponses: 3
    Dernier message: 09/01/2006, 10h12
  5. [Outils]Interface WEB pour la gestion de projet ?
    Par elitost dans le forum Outils
    Réponses: 8
    Dernier message: 04/03/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo