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
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.
#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);
}
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.
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
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
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.
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?
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.
Discord NaN. Mon site.
J'espere que tu comprends l'idée.