Partage
  • Partager sur Facebook
  • Partager sur Twitter

avoir plusieurs classe avec le même ui ?

qt c++

Sujet résolu
    15 juillet 2020 à 13:51:29

    bonjour tout est dans le titre … je ne sais pas comment inclure plusieurs foi un ui dans des classe diferante

    merci d'avance 

    -
    Edité par unel 15 juillet 2020 à 15:37:32

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2020 à 16:25:25

      EneeDiIorio1 a écrit:

      inclure un ui

      J’espère vraiment que tu ne parles pas d'User Interface, parce que ça rend la question encore plus incompréhensible. Et, non, tout n'est pas dans le titre.

      On pourrait mieux t'aider si on avait ton code sous les yeux :)

      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2020 à 16:26:16

        Je comprends pas non plus la question.
        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2020 à 16:36:15

          En conception naïve, c'est plutôt l'inverse: Une UI (User Interface ?) qui intègre des classes.

          Mais si on veux faire propre et maintenable, on va interfacer tout ce petit monde.

          A moins que tu ne parles d'autre chose ….

          Pouvez répéter la question ?
          Stéphanie de Monaco

          -
          Edité par Deedolith 15 juillet 2020 à 16:37:19

          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2020 à 17:29:38

            bonjour voila j'ais un tchat ou je rajoute un mot de passe pour ce faire j'ai crée un serveur d'acceptation ou les clients seront mis en "attente " des leurs connexion. pour que mon code soit plus lisible j'ai crée une classe serveur et une autre serveur secondaire. mais voila dans ma classe serveur secondaire j'ai voulu ajouter du texte dans une zone de texte. mais quand on demande a qt de crée un ui il nous crée tout seul la classe liée et donc je cherche a crée deux classe liée : serveur et serveursecondaire.

            le pro

            TEMPLATE = app
            QT += widgets network
            FORMS += \
                serveurui.ui
            
            HEADERS += \
                serveursecondair.h \
                serveurui.h
            
            SOURCES += \
                main.cpp \
                serveursecondair.cpp \
                serveurui.cpp
            

            le seveurui .h

            #ifndef SERVEURUI_H
            #define SERVEURUI_H
            #include <QtWidgets>
            #include <QtNetwork>
            namespace Ui {
            class serveurui;
            }
            
            class serveurui : public QMainWindow
            {
                Q_OBJECT
            public:
                explicit serveurui(QWidget *parent = nullptr);
                ~serveurui();
                QList<QTcpSocket *> clients;
                QList<QTcpSocket *> clientsAutoriser;
            public slots:
                void nouvelleConnexion();
                void fonc_donneesRecues();
                void fonc_deconnexionClient();
                void envoyerATous(const QString &message);
                void fonc_envoyerAUn(const QString &message_slot, int &nomDuClient);
                void fonc_changerDePort();
                void fonc_suprimerDiscute();
                void fonc_ajoutDansLaListeDesClients(QList<QTcpSocket *> LeClients);
                void on_pushButtonrecape_clicked();
                void on_actionraport_de_bug_triggered();
                void on_actionquiz_triggered();
                void on_actiondemander_des_amilioration_mise_a_jour_triggered();
                void on_changerDePort_clicked();
                void on_effacerDiscution_clicked();
            
            private slots:
                void on_spinBox_valueChanged(int arg1);
                void on_motDePasseQestion_clicked();
            
            private:
                Ui::serveurui *ui;
                QString *message_slot;
                int *nomDuClient;
                QVector< QTcpSocket *> clientsEnAtente;
                QTcpServer *serveur;
                QTcpServer *reservationDunPort;
                QTcpSocket *reservation;
                quint16 tailleMessage;
            };
            
            #endif // SERVEURUI_H
            

            les seveur secondaire .h

            #ifndef SERVEURSECONDAIR_H
            #define SERVEURSECONDAIR_H
            #include <serveurui.h>
            
            namespace Ui {
            class serveurui;
            }
            
            class serveursecondair :public serveurui
            {
                Q_OBJECT
            public:
                serveursecondair();
                QList<QTcpSocket *> clientsautorisee;
                QTcpServer *serveursecondaire;
            public slots:
                void nouvelleConnexionsecondaire();
                void deconexionserveursecondaire();
                void doneerecueserveursecondaire();
                void envoyerAUnserveursecondaire(const QString &message_slot, int &nomDuClient);
            private:
            
                Ui::serveurui *ui;
            
                QList<QTcpSocket *> clients;
                quint16 tailleMessage;
                };
            
            
            #endif // SERVEURSECONDAIR_H
            

            le serveur .cpp

            #include "serveurui.h"
            #include "ui_serveurui.h"
            #include "serveursecondair.h"
            serveurui::serveurui(QWidget *parent) :
                QMainWindow(parent),
                ui(new Ui::serveurui)
            {
                tailleMessage = 0;
                ui->setupUi(this);
                QString name = qgetenv("USER");
                   if (name.isEmpty())
                       name = qgetenv("USERNAME");
                   qDebug() << name;
                QString nomDeLordi( QHostInfo::localHostName());
                qDebug() << nomDeLordi;
                ui->etatServeur->append(tr("bonjour ") + name + tr(" sur") + nomDeLordi);
            
                // Gestion du serveur
                  serveur = new QTcpServer(this);
                  if (!serveur->listen(QHostAddress::Any)) // Démarrage du serveur sur toutes les IP disponibles et sur le port 50585
                  {
                      // Si le serveur n'a pas été démarré correctement
                      ui->etatServeur->setText(tr("Le serveur n'a pas pu être démarré. Raison :<br />") + serveur->errorString());
                  }
                  else
                  {
                      // Si le serveur a été démarré correctement
                      ui->messagesup->setText(tr("Le serveur a été démarré sur le port <strong>") + QString::number(serveur->serverPort()) + tr("</strong>.<br />Des clients peuvent maintenant se connecter."));
                        connect(serveur,&QTcpServer::newConnection,this,&serveurui::nouvelleConnexion);
                  }
            
            
            
                ui->messagesup->append("voici vos adresse ip");
                 QStringList addresses;
                  foreach(QHostAddress address, QNetworkInterface::allAddresses())
                  {
                    // Filtre les adresses localhost ...
                    if(address != QHostAddress::LocalHostIPv6
                       && address != QHostAddress::LocalHost
                       // ... APIPA ...
                       && !address.isInSubnet(QHostAddress::parseSubnet("169.254.0.0/16"))
                       // ... Lien Local IPv6
                       && !address.isInSubnet(QHostAddress::parseSubnet("FE80::/64")))
                    {
                      addresses << address.toString();
                      qDebug() <<"ip recuperer"<< address.toString();
                    }
                  }
                  // Affichage dans ta zone de texte
                  foreach(QString address, addresses)
                  {
                     ui->messagesup-> append(address);
                  }
                  ui->messagesup->append("doner les aux client en meme teps que le port");
            
            
            
            }
            
            void serveurui::fonc_changerDePort()
            {
                envoyerATous("<br /><em>le serveur a demadée un changement de port</em><br />");
                int reponse = QMessageBox::warning(this, "serveur confirmation changement de port", "tout les client vont etre deconectée <br> vous confirmé(e)(s)?", QMessageBox ::Yes | QMessageBox::No);
                if (reponse == QMessageBox::Yes)
                {
                    envoyerATous("<br /><em>le serveur a confirmée le changement de port</em><br />");
                    int reponse2 = QMessageBox::question(this, "serveur envoyer un message", "voulez vous que les clients soit informée du nouveaux port avant la deconexion ?", QMessageBox ::Yes | QMessageBox::No);
                    reservationDunPort = new QTcpServer(this);
                    if (reponse2 == QMessageBox::Yes)
                    {
                        envoyerATous(tr("Le nouveaux serveur est pret a etre démarré sur le port <strong>") + reservationDunPort->serverPort() + ("</strong>"));
                    }
                    if (!reservationDunPort) // Démarrage du serveur sur toutes les IP disponibles
                         {
                             // Si le serveur n'a pas été démarré correctement
                             ui->etatServeur->append(tr("erreur imposible de crée le nouveaux serveur.les client ne sont pas deconecter de l'encien Raison :<br />") + serveur->errorString());
                             envoyerATous("</em>erreur imposible de crée le nouveaux serveur.les client ne sont pas deconecter de l'encien la demande de changement de port n'a pas pu aboutire </em>");
                             QMessageBox::critical(this, "oups", "ca na pas fonctionéeles client ne sont pas deconecter de l'encien serveur");
                             return;
                         }
                         else
                         {
                             // Si le serveur a été démarré correctement
                             ui->messagesup->append(tr("Le nouveaux serveur est pret a etre démarré sur le port <strong>") + QString::number(reservationDunPort->serverPort())+ ("</strong>"));
            
            
            
                             int leProchainPort (reservationDunPort->serverPort());
            
            
                                delete serveur;
                                delete  reservationDunPort;
                                 serveur = new QTcpServer(this);
                                 if (!serveur->listen(QHostAddress::Any, leProchainPort)) // Démarrage du serveur sur toutes les IP disponibles et sur le port port
                                 {
                                     // Si le serveur n'a pas été démarré correctement
                                     ui->etatServeur->append(tr("Le serveur n'a pas pu être démarré. Raison :<br />") + serveur->errorString());
                                     QMessageBox::critical(this, "oups", "ca na pas fonctionée et les client ont été deconecter pendant la fase critique Raison : <br />" + serveur->errorString());
                                 }
                                 else
                                 {
                                     // Si le serveur a été démarré correctement
                                     ui->etatServeur->append(tr("Le serveur a été démarré sur le port <strong>") + QString::number(serveur->serverPort()) + tr("</strong>.<br />Des clients peuvent maintenant se connecter. <br />"));
                                     connect(serveur,&QTcpServer::newConnection,this,&serveurui::nouvelleConnexion);
                                     QMessageBox::information(this, "youpi", "tout a bien fonctionée");
                                 }
            
            
                             }
            
                         }else
                        {
                            envoyerATous("<br /><em>le serveur a anulez le changement de port</em><br />");
                        }
            }
            
            void serveurui::fonc_donneesRecues()
            {
                // 1 : on reçoit un paquet (ou un sous-paquet) d'un des clients
                // On détermine quel client envoie le message (recherche du QTcpSocket du client)
                QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
                if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
                {
                    ui->etatServeur->append(tr("imposible de trouver le clients"));
                    return;
                }
                // Si tout va bien, on continue : on récupère le message
                QDataStream in(socket);
            
                if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
                {
                    if (socket->bytesAvailable() < (int)sizeof(quint16)) // On n'a pas reçu la taille du message en entier
                         return;
            
                    in >> tailleMessage; // Si on a reçu la taille du message en entier, on la récupère
                }
            
                // Si on connaît la taille du message, on vérifie si on a reçu le message en entier
                if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas encore tout reçu, on arrête la méthode
                    return;
            
            
                // Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
                QString message;
                in >> message;
            
            
                // 2 : on renvoie le message à tous les clients
                envoyerATous(message);
            
            
                // 3 : remise de la taille du message à 0 pour permettre la réception des futurs messages
                tailleMessage = 0;
            }
            void serveurui::nouvelleConnexion()
            {
            
                if (ui->motDePasseQestion->checkState()==0)
                {
                    QTcpSocket *nouveauClient = serveur->nextPendingConnection();
                    clients << nouveauClient;
                    connect(nouveauClient,&QTcpSocket::readyRead,this,&serveurui::fonc_donneesRecues);
                    connect(nouveauClient,&QTcpSocket::disconnected,this,&serveurui::fonc_deconnexionClient);
                    QString texte;
            
                    QFile fichier("chat.ants");
            
                    if(fichier.open(QIODevice::ReadOnly | QIODevice::Text))
                    {
                        QTextStream flux(&fichier);
                        while(!flux.atEnd())
                            texte += flux.readLine();
                        fichier.close();
                    }
                    else
                    {
                        ui->etatServeur->append("le fichier et inaxecible");
                    }
                    QByteArray paquet;
                    QDataStream out(&paquet, QIODevice::ReadWrite);
                    out << (quint16) 0; // On écrit 0 au début du paquet pour réserver la place pour écrire la taille
                    out << texte; // On ajoute le message à la suite
                    out.device()->seek(0); // On se replace au début du paquet
                    out << (quint16) (paquet.size() - sizeof(quint16)); // On écrase le 0 qu'on avait réservé par la longueur du message
                    ui->etatServeur->append("il y a " + QString::number( clients.size()));
                    ui->etatServeur->append("envoi a  " + QString::number( clients.size()-1));
                    clients[clients.size()-1]->write(paquet);
            
                    envoyerATous(tr("<em>Un nouveau client vient de se connecter</em>"));
                }
                else if (ui->motDePasseQestion->checkState()==2)
                {
                    QTcpSocket *const nouveauClient = serveur->nextPendingConnection();
                    int position = clientsAutoriser.indexOf(nouveauClient);
                    if( position != -1)
                    {
                        envoyerATous(tr("<em>Un nouveau client vient de se connecter avec un mot de passe</em>"));
                    }
                    else
                    {
                        //rediriger vers le serveur secondair
                    }
            
                }
            }
            void serveurui::fonc_deconnexionClient()
            {
                envoyerATous(tr("<em>Un client vient de se déconnecter</em>"));
            
                // On détermine quel client se déconnecte
                QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
                if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
                    return;
            
                clients.removeOne(socket);
            
                socket->deleteLater();
            }
            
            
            
            
            void serveurui::fonc_suprimerDiscute()
            {
                int suprreponse = QMessageBox::warning(this, "confirmation","voulez vous suprimer le fichier de discution les nouveaux clients n'auront pas les message antérieur", QMessageBox::Yes | QMessageBox::No);
                if (suprreponse == QMessageBox::Yes)
                {
                    if(QFile::remove("chat.ants"))
                    {
                        QMessageBox::information(this,"reusite","le fichier a bien été suprimer");
                    }
                    else
                    {
                        QMessageBox::critical(this,"Erreur","Impossible de supprimer le fichier !");
                    }
                }
                else if (suprreponse == QMessageBox::No)
                {
                    QMessageBox::information(this, "anulation", "l'anulation a bien été prise en compte");
                }
            
            }
            void serveurui::on_pushButtonrecape_clicked()
            {
                QMessageBox::information(NULL,"information","le fichier va etre créé cela peut prendre du temps");
                QFile fichier("ANANTA-SYSTEME-tchat-recapitulatif.txt");
                QString nBTour("1");
                if(fichier.exists())
                {
                    QMessageBox::information(this,"Erreur","ANANTA-SYSTEME-tchat-recapitulatif.txt existe deja il va donc etre renomée par ANANTA-SYSTEME-tchat-ancien-recapitulatif.txt");
                    QFile fichier("ANANTA-SYSTEME-tchat-recapitulatif.txt");
                    if(!fichier.rename("ANANTA-SYSTEME-tchat-ancien-recapitulatif.txt"))
                    {
                        int reponse(QMessageBox::critical(NULL,"Erreur","Impossible de renommer le fichier ! peut etre q'il existe deja voulez vous le renomée? vouler vous le suprimée ?", QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel));
                        if (reponse == QMessageBox::Save)
                        {
                            // Save was clicked
                            bool ok = false;
                            QString nouveauNomDeFichier = QInputDialog::getText(this, "changer le nom", "Quel est le nouveaux nom ?", QLineEdit::Normal, QString(), &ok);
                            if (ok && !nouveauNomDeFichier.isEmpty())
                           {
                                QFile fichier("ANANTA-SYSTEME-tchat-recapitulatif.txt");
                                if(!fichier.rename(nouveauNomDeFichier))
                                {
                                    QMessageBox::critical(NULL,"Erreur","Impossible de renommer le fichier ! la metode va s'areter!");
                                    return;
                                }
                                QMessageBox::information(this, "reusite", "tous a bien fonctioner le fichier a eté renomée par " + nouveauNomDeFichier);
                           }
                           else
                           {
                                return;
                           }
            
            
                        }
                        else if (reponse == QMessageBox::Discard)
                        {
                            QFile fichier("ANANTA-SYSTEME-tchat-recapitulatif.txt");
                            if(!fichier.remove())
                            {
                                QMessageBox::critical(NULL,"Erreur","Impossible de supprimer le fichier !");
                                return;
                            }
                        }
                        else if (reponse==QMessageBox::Cancel)
                        {
                            return;
                        }
                        else
                        {
                            QMessageBox::critical(NULL,"Erreur","erreur");
                            return;
                        }
                    }
                }
                QString recapitulatif; // on ecrit ce quon va metre dans le fichier
                QString connexionPosible;//on ecrit ce quon va metre dans le fichier
            
            
                if (QString::number(serveur->isListening())==true)//on veux savoir si on peut recevoir des conexion
                {
                    connexionPosible = "oui";//on veux savoir si on peut recevoir des conexion
                }
            
            
                else if (QString::number(serveur->isListening())==false)
                {
                    connexionPosible = "non";//on veux savoir si on peut recevoir des conexion
                }
                else
                {
                    connexionPosible = "aucune information si il y a une erreur redemarer le serveur";
                }
            
                QString heurs (QDateTime::currentDateTime().toString("ddd dd MMM yyyy hh:mm:ss")); //on preds l'heur et la date
                QString heursEtNom (tr("ANANTA SYSTEME - tchat - recapitulatif du :")  + heurs );
                QFile recap("ANANTA-SYSTEME-tchat-recapitulatif.txt");
                if (recap.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Append))
                {
                    QTextStream fichier(&recap);
                    fichier.setCodec("UTF-8");
                    fichier <<endl <<endl <<endl <<endl <<endl << tr("__________Auto généré par ANANTA SYTEME dans le cadre de son projet de tchat__________") << endl;
                    fichier << heursEtNom << endl;
                    fichier << tr("Le serveur a été démarré sur le port :") << QString::number(serveur->serverPort()) << tr(".") << endl;
                    fichier << tr("des clients peuvent se conecter :") << connexionPosible << endl;
                    fichier << tr("vos adresse ip sont : ") << endl;
                    //ip
                    {//on met des crocher pour deconstruire la liste a la fin
                       QList<QHostAddress> listes;
                       listes = QNetworkInterface::allAddresses();
                       for(int i = 0; i< listes.size(); i++)
                       {
                       fichier << (listes.at(i).toString()) << endl;
                       }
                    }
                    fichier << tr("le nombre maximum de conexion en atente est :") << serveur->maxPendingConnections()<<endl;
                    fichier << tr("il y a actuelement :") << clients.size() <<tr("client(s) conecter au serveur") << endl;
                    //if (ui->motDePasseQestion->isChecked())
                    //{
                    //    fichier << tr("il y a actuelement :") << clientsEnAtente.size() <<tr("client(s) conecter au serveur en mode protexction car il n'on pas encor rentrer le mot de passe") << endl;
                    //}
                    fichier << tr("la dérniere erreur a été :")<<serveur->errorString() << tr("avec le code d'erreur") << serveur->serverError() <<endl;
                    fichier << tr("voici ce qui a été afichier sur les message generaux du serveur : ")<<endl;
                    fichier << ui->etatServeur->toPlainText();
                    recap.close();
                    QMessageBox::information(NULL,"information","le fichier a été corectement ecrit tentative d'ouverture cela peut prendre un peut de temps");
                    if(!QDesktopServices::openUrl(QUrl("ANANTA-SYSTEME-tchat-recapitulatif.txt")))
                    {
                        ui->etatServeur->append("Erreur d'ouverture du fichier");
                        QMessageBox::critical(this,"Erreur","Impossible d'ouvrir le fichier ! vous pouvez le fair manuellement il s'apelle : ANANTA SYSTEME - tchat - recapitulatif.txt");
                    }
            
                }
                else
                {
                    QMessageBox::critical(this,"Erreur","Impossible d'ouvrir le fichier ! ... passage en mode auxiliaire");
                    ui->etatServeur->append (tr("__________Auto généré par ANANTA SYTEME dans le cadre de son projet de tchat__________"));
                    ui->etatServeur->append (tr("Le serveur a été démarré sur le port <strong>") + QString::number(serveur->serverPort()) + tr("</strong>."));
                    ui->etatServeur->append (tr("des clients peuvent se conecter :<strong>") +connexionPosible  + tr("</strong>") );
                    ui->etatServeur->append (tr("vos adresse ip sont : ") );
                    QList<QHostAddress> listes;
                    listes = QNetworkInterface::allAddresses();
                    //ip
                    {
                        QList<QHostAddress> listes;
                        listes = QNetworkInterface::allAddresses();
                        for(int i = 0; i< listes.size(); i++)
                        {
                        ui -> etatServeur -> append(listes.at(i).toString());
                        }
                    }
            
                    ui->etatServeur->append (tr("le nombre maximum de conexion en atente est :") + serveur->maxPendingConnections());
                    ui->etatServeur->append (tr("il y a actuelement :") + clients.size() + tr("client(s) conecter au serveur") );
                    //if (ui->motDePasseQestion->isChecked())
                    //{
                    //     ui->etatServeur->append (tr("il y a actuelement :") + clientsEnAtente.size() + tr("client(s) conecter au serveur en mode protexction car il n'on pas encor rentrer le mot de passe"));
                    //}
                    ui->etatServeur->append (tr("la dérniere erreur a été :") + serveur->errorString() + tr("avec le code d'erreur") + serveur->serverError() );
                    QMessageBox::information(this,"recapitulatif - mode auxiliaire","tout a été ecrits dans les message generaux");
            
                }
            
            
            }
            void serveurui::fonc_envoyerAUn(const QString &message_slot, int &nomDuClient)
            {
                QByteArray paquet;
                QDataStream out(&paquet, QIODevice::ReadWrite);
                out << (quint16) 0; // On écrit 0 au début du paquet pour réserver la place pour écrire la taille
                out << message_slot; // On ajoute le message à la suite
                out.device()->seek(0); // On se replace au début du paquet
                out << (quint16) (paquet.size() - sizeof(quint16)); // On écrase le 0 qu'on avait réservé par la longueur du message
                clients[nomDuClient]->write(paquet);
            }
            
            void serveurui::on_actionraport_de_bug_triggered()
            {
                if(!QDesktopServices::openUrl(QUrl("https://forms.office.com/Pages/ResponsePage.aspx?id=ngI8X0BZM0O9t8dvqqVbvsLBnGZwIqpLv2OTA2kkQXhUODFSUElHRURRSjZBWFNYTU82R0tFV0ZZQi4u")))
                {
                    QMessageBox::critical(this,"Erreur","Impossible d'ouvrir le site  !");
                }
            }
            
            void serveurui::on_actionquiz_triggered()
            {
                if(!QDesktopServices::openUrl(QUrl("https://forms.office.com/Pages/ResponsePage.aspx?id=ngI8X0BZM0O9t8dvqqVbvsLBnGZwIqpLv2OTA2kkQXhUMlBXVTIzR0pCSzNWMFlDUjU2QUhSSFhUTi4u")))
                    {
                        QMessageBox::critical(this,"Erreur","Impossible d'ouvrir le site ! ");
                    }
            }
            
            void serveurui::on_actiondemander_des_amilioration_mise_a_jour_triggered()
            {
                if(!QDesktopServices::openUrl(QUrl("https://forms.office.com/Pages/ResponsePage.aspx?id=ngI8X0BZM0O9t8dvqqVbvsLBnGZwIqpLv2OTA2kkQXhUQU5OVUVKT1VNQ0w2RFZPWjRMUEJGVjRPQS4u")))
                {
                    QMessageBox::critical(this,"Erreur","Impossible d'ouvrir le site  !");
                }
            }
            void serveurui::on_changerDePort_clicked()
            {
                fonc_changerDePort();
            }
            void serveurui::on_effacerDiscution_clicked()
            {
                fonc_suprimerDiscute();
            }
            void serveurui::fonc_ajoutDansLaListeDesClients(QList<QTcpSocket *> LeClients)
            {
                int tailleDeLeClients (LeClients.size());
                 clientsAutoriser << LeClients[tailleDeLeClients];
            }
            void serveurui::envoyerATous(const QString &message)
            {
                // Préparation du paquet
                QByteArray paquet;
                QDataStream out(&paquet, QIODevice::WriteOnly);
            
                out << (quint16) 0; // On écrit 0 au début du paquet pour réserver la place pour écrire la taille
                out << message; // On ajoute le message à la suite
                out.device()->seek(0); // On se replace au début du paquet
                out << (quint16) (paquet.size() - sizeof(quint16)); // On écrase le 0 qu'on avait réservé par la longueur du message
            
            
                // Envoi du paquet préparé à tous les clients connectés au serveur
                for (int i = 0; i < clients.size(); i++)
                {
                    clients[i]->write(paquet);
                }
            
            }
            
            void serveurui::on_spinBox_valueChanged(int arg1)
            {
                serveur->setMaxPendingConnections(arg1);
            }
            void serveurui::on_motDePasseQestion_clicked()
            {
                serveursecondair();
            }
            serveurui::~serveurui()
            {
                delete ui;
            }
            
            
            
            

            le seveur secondair .cpp

            #include "serveursecondair.h"
            #include <QtWidgets>
            #include <QtNetwork>
            serveursecondair::serveursecondair()
            {
                // Gestion du serveur
                serveursecondaire = new QTcpServer(this);
                if (!serveursecondaire->listen(QHostAddress::Any)) // Démarrage du serveur sur toutes les IP disponibles et sur le port 50585
                {
                    // Si le serveur n'a pas été démarré correctement
                    ui->ettatserveurmotdepasse->append(tr("Le serveur de conexion n'a pas pu être démarré. Raison :<br />") + serveursecondaire->errorString());
                }
                else
                {
                    // Si le serveur a été démarré correctement
                  ui->ettatserveurmotdepasse->append(tr("Le serveur de conexion a été démarré sur le port <strong>") + QString::number(serveursecondaire->serverPort()) + tr("</strong>.<br />Des clients peuvent maintenant se connecter."));
                    connect(serveursecondaire,&QTcpServer::newConnection,this,&serveursecondair::nouvelleConnexionsecondaire);
                }
            
                tailleMessage = 0;
            }
            
            void serveursecondair::nouvelleConnexionsecondaire()
            {
            
                QTcpSocket *nouveauClient = serveursecondaire->nextPendingConnection();
                clients << nouveauClient;
            
                connect(nouveauClient,&QTcpSocket::readyRead,this,&serveursecondair::doneerecueserveursecondaire);
                connect(nouveauClient,&QTcpSocket::disconnected,this,&serveursecondair::deconexionserveursecondaire);
            }
            
            void serveursecondair::doneerecueserveursecondaire()
            {
                // 1 : on reçoit un paquet (ou un sous-paquet) d'un des clients
                    // On détermine quel client envoie le message (recherche du QTcpSocket du client)
                    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
                    if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
                    {
                        ui->etatServeur->append(tr("imposible de trouver le clients"));
                        return;
                    }
                    // Si tout va bien, on continue : on récupère le message
                    QDataStream in(socket);
            
                    if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
                    {
                        if (socket->bytesAvailable() < (int)sizeof(quint16)) // On n'a pas reçu la taille du message en entier
                             return;
            
                        in >> tailleMessage; // Si on a reçu la taille du message en entier, on la récupère
                    }
            
                    // Si on connaît la taille du message, on vérifie si on a reçu le message en entier
                    if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas encore tout reçu, on arrête la méthode
                        return;
            
                    // Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
                    QString message;
                    in >> message;
                    if (message.contains(ui->leMotDePasse->text()))
                    {
                        int nomDuClientsModeProtegee (clients.indexOf(socket));
                        envoyerAUnserveursecondaire("bravo vous avez rentré le bon code vous alez etre redirigé(e)(s)", nomDuClientsModeProtegee);
                        clients << socket;
                        envoyerAUnserveursecondaire("vous avez etez deplacée vers la partition principal vautre partition protegée a étée surpimée!vous avez etez deplacée vers la partition principal vautre partition protegée a étée surpimée!", nomDuClientsModeProtegee);
                        clientsautorisee << socket;
                       clients.removeAt(nomDuClientsModeProtegee); //essailler de metre une fonction dans serveurui avec comme parametre nomDuClientsModeProtegee et qui le remouve
                    }
                    else
                    {
                       int nomDuClientsModeProtegee (clients.indexOf(socket));
                      envoyerAUnserveursecondaire("faux", nomDuClientsModeProtegee);
                    }
                    // 3 : remise de la taille du message à 0 pour permettre la réception des futurs messages
                    tailleMessage = 0;
            }
            
            void serveursecondair::deconexionserveursecondaire()
            {
                // On détermine quel client se déconnecte
                QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
                if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
                    return;
            
                clients.removeOne(socket);
            
                socket->deleteLater();
            }
            
            void serveursecondair::envoyerAUnserveursecondaire(const QString &message_slot, int &nomDuClient)
            {
                QByteArray paquet;
                QDataStream out(&paquet, QIODevice::ReadWrite);
                out << (quint16) 0; // On écrit 0 au début du paquet pour réserver la place pour écrire la taille
                out << message_slot; // On ajoute le message à la suite
                out.device()->seek(0); // On se replace au début du paquet
                out << (quint16) (paquet.size() - sizeof(quint16)); // On écrase le 0 qu'on avait réservé par la longueur du message
                clients[nomDuClient]->write(paquet);
            }
            

            le main

            #include <QApplication>
            #include "serveurui.h"
            #include "serveursecondair.h"
            int main(int argc, char *argv[])
            {
                QApplication app(argc, argv);
                QString locale = QLocale::system().name().section('_', 0, 0);
                QTranslator translator;
                translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
                app.installTranslator(&translator);
                serveurui serveur;
                serveursecondair serveurssecondair;
                serveur.show();
            
                return app.exec();
            }
            



            je recois une sigsegv a la ligne 16 du seveur secondair.cpp




            -
            Edité par unel 15 juillet 2020 à 17:34:20

            • Partager sur Facebook
            • Partager sur Twitter
              16 juillet 2020 à 9:15:35

              Un seul mot: Ségrégation !

              Tu nous parle de plusieurs notions:
              - Serveur.
              - Interface graphique.
              - Client (tu n'en parle pas, mais ça doit être présent quelque part).
              Donc tu dois avoir plusieurs classes qui représentent ces notions.

              Les serveurs (et clients) s'occupe de la communication.
              Les interfaces graphique utilisent un serveur (ou client) pour afficher les données.

              • Partager sur Facebook
              • Partager sur Twitter
                25 juillet 2020 à 20:52:07

                ma question de base était :comment afficher du texte dans une qtexteedit à partir d'une classe qui n'est pas le ui.
                • Partager sur Facebook
                • Partager sur Twitter
                  25 juillet 2020 à 20:59:52

                  EneeDiIorio1 a écrit:

                  avoir plusieurs classe avec le même ui ?

                  Au cas ou tu ne t'en souvienne plus !

                  Les Messieurs, te demandes, c'est quoi que tu appelles un UI ?



                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 juillet 2020 à 21:08:52

                    quand je parle d' "ui" je parle du fichier .ui générer par qt: l'interface utilisateur  qui au lieux d’être programmer a la main sont fait grâce a qt design
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 juillet 2020 à 1:52:51

                      Le principe reste le même:

                      Tu as des classes qui se chargent de l'affichage, et des classes qui se chargent de la communication.
                      Elles doivent être séparées.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juillet 2020 à 20:10:27

                        et donc comment celle de la communication affiche un message d'erreur ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 juillet 2020 à 9:50:14

                          Elle ne l'affiche pas, elle fournit le service, c'est l'un de tes widget qui va afficher.

                          Prend la classe std::string en exemple, elle n'affiche rien. Par contre elle fournit un moyen de lire son contenu.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            28 juillet 2020 à 19:00:31

                            Et donc comment afficher à partir d'une autre classe ? 

                            Çar quand je met :ui->etatserveur->arpened"truc"

                            Il me dit qu'il ne trouve pas naimspace ui

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 juillet 2020 à 14:03:12

                              Par exemple:
                              QLabel *label = new QLabel(this);
                              Client client;
                              if (!client.connect("192.168.0.25"));
                                  label->setText(client.getErrorMessage());
                              J'espere que tu comprends l'idée.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 juillet 2020 à 11:57:12

                                si j’écris c'est ligne dans le serveurui ça marche car il est lier a l'interface utilisateur par je ne sait quelle lien mais si je le met dans serveursecondair ça ne fonctionne pas car il n'y a pas ce lien j'aimerais donc crée ce lien dans d'autre classe que celle lier des la création de l'interface utilisateur comment( faire ?

                                pourtant jais inclus serveurui dans serveursecondair : classserveursecondair:publicserveurui

                                rectification :

                                il n'y a aucune erreur mais lors de l’exécution je me prend une sigsegv

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  30 juillet 2020 à 14:19:22

                                  Tu confonds toujours interface graphique (ce qui est affiché à l'ecran), et serveur.

                                  Un serveur, qu'il soit primaire, secondaire, ternaire (ou autre), n'est pas une interface graphique.
                                  C'est un fournisseur de services, rien de plus.

                                  Commence par mettre QT de coté, développe ton serveur, ton client, test les échanges entre eux, et enfin développe les fenêtres (avec QT) qui permettrons les interactions homme <==> machine.

                                  -
                                  Edité par Deedolith 30 juillet 2020 à 14:23:02

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 juillet 2020 à 19:11:23

                                    ha ok il faut que je fasse une classe fenêtre général qui va contenir tout les widjet et qui va avoir des classe comme modifieretatserveur(qstring etat)

                                    c'est ca?

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    avoir plusieurs classe avec le même ui ?

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown