Les derniers messages du forum QtFR.

25/02/2017

Il me manque un fichier UI sous QtCreator

Bonjour à tous,
J’ai créé une petite application, qui contient une dizaine de classes, et chaque classe possède sa propre fenêtre, mon problème est que il me manque une fenêtre graphique, pourtant je l’ai bien créé avec QtCreator, comme toutes les autres fenêtres. Et à chaque fois où je crée pour la première fois le répertoire build-application_gestion-Desktop_Qt_5_7_0_MinGW_32bit-Debug
Il me sort l’erreur que le fichier ui_fen_gestion_produits_finis est manquant, alors je le récupère manuellement de la version précédente d'un répertoire build-application_gestion-Desktop_Qt_5_7_0_MinGW_32bit-Debug et je le copie dans le répertoire où se trouve tous les autres fichiers de ce type. (build-application_gestion-Desktop_Qt_5_7_0_MinGW_32bit-Debug)
Ensuite l’exécution du programme se déroule normalement.

Dans le fichier pro, J’ai pour chaque fichier 3 types
Par exemple :
fenprincipalegestion.cpp \
fenprincipalegestion.h \
fenprincipalegestion.ui \
sauf pour le fichier
fen_gestion_produits_finis
où je n’ai que 2 type de fichiers
fen_gestion_produits_finis.h \
fen_gestion_produits_finis.cpp \
idem pour le répertoire de mon application il manque toujours le fichier
fen_gestion_produits_finis.ui


et pourtant quand j’exécute mon programme la fenêtre s’affiche et bien fonctionnelle, le problème c’est que je ne peux pas la modifiée avec qtCreator, vu qu’elle n’est pas listée. Si quelqu’un a une idée ?
Merci d’avance
22/02/2017

Difficulté de communication entre une classe fille et sa classe mère.

Bonjour à tous,

Je viens vers vous, une nouvelle fois, parce que je n'arrive pas à faire communiquer une classe fille avec sa classe mère. Que cela soit par la méthode des signaux/slots :
connect(buttonGroup, SIGNAL(buttonClicked(int)),parent, SLOT(gestionDesClasses(int)));
ou en direct, dans le code :

parent->gestionDesClasses(1);
parent()->gestionDesClasses(1);
parentWidget->gestionDesClasses(1);
parent->parent()->gestionDesClasses(1);

rien ne marche ...
Du coup, voici 3 questions pour vous :
1) Puisque j'ai activé la macro et transféré parent grâce à this (???), que faut-il pour que le code fonctionne dans le constructeur ?
2) Même question mais dans une fonction de ma classe fille ?
3) Comment puis-je parler à la classe grand mère, parent->parent()-> ?

Le .cpp
#ifndef DISPATCH_CPP
#define DISPATCH_CPP

#include "dispatch.h"

Dispatch::Dispatch(QWidget *parent)
: QWidget(parent)
{
}
void Dispatch::gestionDesClasses(int bouton)
{
QWidget* widget = new QWidget(this);
widget->setAttribute(Qt::WA_TranslucentBackground);
QGridLayout* gridLyout = new QGridLayout;
widget->setLayout(gridLyout);
widget->setGeometry(100,30,480,540);
etape02 = new Etape02;
gridLyout->addWidget(etape02);
etape02->show();
widget->show();
variablesDEnvironements->show();
}
Le .h
#ifndef DISPATCH_H
#define DISPATCH_H

#include <QtWidgets>

#include "etape02.h"

class Dispatch : public QWidget
{
Q_OBJECT

public:

Dispatch(QWidget *parent = Q_NULLPTR);
~Dispatch();

Etape02* etape02 = Q_NULLPTR;

public slots:

void gestionDesClasses(int);
}
22/02/2017

Qt et Openssl

Bonjour à tous depuis un moment je tente de faire fonctionner le cryptage de données entre un client serveur.

j' ai créer une clé privée et un certificat auto-signé.
Sous ubuntu studio
Cela ne fonctionne pas et je ne comprend pas pourquoi. Différents paramétrage donnent des erreurs différentes....


coté client :
#include <QSslSocket>
client->abort();
QSslConfiguration sslConfiguration;
QFile certFile(QStringLiteral("ssl/manager.crt"));
QFile keyFile(QStringLiteral("ssl/manager.key"));
certFile.open(QIODevice::ReadOnly);
keyFile.open(QIODevice::ReadOnly);
QSslCertificate certificate(&certFile, QSsl::Pem);
QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem,QSsl::PrivateKey,"caribertus est mon nom latin");
certFile.close();
keyFile.close();
sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfiguration.setLocalCertificate(certificate);
sslConfiguration.setPrivateKey(sslKey);
sslConfiguration.setProtocol(QSsl::SslV2);
client->setSslConfiguration(sslConfiguration);
// On désactive les connexions précédentes s'il y en a
client->connectToHostEncrypted(dd.getIP(),port);

if(!client->waitForConnected(2000)){
coté serveur :
QSslConfiguration sslConfiguration = QSslConfiguration::defaultConfiguration();
QFile certFile(QStringLiteral("ssl/manager.crt"));
QFile keyFile(QStringLiteral("ssl/manager.key"));
certFile.open(QIODevice::ReadOnly);
keyFile.open(QIODevice::ReadOnly);
QSslCertificate certificate(&certFile, QSsl::Pem);
QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem,QSsl::PrivateKey,"caribertus est mon nom latin");
certFile.close();
keyFile.close();
sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
sslConfiguration.setLocalCertificate(certificate);
sslConfiguration.setPrivateKey(sslKey);
sslConfiguration.setProtocol(QSsl::SslV2);
newSocket->setSslConfiguration(sslConfiguration);
queue.enqueue(newSocket);
 socket->startServerEncryption();

message d' erreurs :
qt.network.ssl: QSslSocket::startClientEncryption: cannot start handshake on non-plain connection
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv2_server_method
qt.network.ssl: QSslSocket: cannot call unresolved function SSLv2_server_method
Serveur : void SSLProcessor::erreurSocketServeur(QAbstractSocket::SocketError) QAbstractSocket::SocketError(21) "Error creating SSL context (error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed,
25/02/2017

Raccourci clavier item ajouté à contextMenu...

Bonjour,
Dans un QTextEdit, j'ai ajouté un item au popMenu standard et j'aurais souhaité avoir un raccourci clavier.
J'ai codé ainsi:
void MainWindow::showContextMenu2(const QPoint &pt)//popMenu de resume
{
QMenu *menu2 = ui->resume->createStandardContextMenu();//où ui->resume est mon QTextEdit
menu2->addSeparator();
menu2->menuAction()->setShortcut(QKeySequence("Ctrl+S"));//raccourci clavier souhaité
menu2->addAction(save);

menu2->exec(ui->resume->mapToGlobal(pt));
delete menu2;
}
le menu s'affiche bien par un clic droit sur ce QTextEdit avec l'option en question mais point de raccourci!
Qu'ai-je donc oublié?
25/02/2017

Appeler un destructeur sur une valeur T dans une fonction template

Bonjour !

J'ai créé une classe template qui stocke des valeurs de type T dans un tableau m_data :
m_data = new T [nbre d'éléments]
Ce type T est vraiment quelconque, donc peut être un pointeur.
J'ai parfois besoin de redimensionner m_data. Je peux faire un delete puis un new, mais avant le delete je souhaite appeler le destructeur de chaque élément T stocké.

Comment fait-on ??

Merci !
16/02/2017

Problème de thread

Bonjour à tous,
J’essaye de créer une application qui me permet de sauvegarder un fichier ou un répertoire d’origine vers un répertoire de destination. voir image 1image
Le problème c’est que quand le processus de copie commence, la fenêtre de l’application devient bloquante, c’est-à-dire que je ne peux même pas la réduire ou la fermée avant que la copie ne soit terminée.
Pour cela j’ai pensé à utiliser les threads, alors j’ai procédé comme suit :
J’ai créé la fonction suivante :
Remarques : j’ai remplacé une partie du code par des points, afin de réduire la taille du message)
int copyDirFile(string sourceFolderString, string destFolderString, ARG_INFO_STRUCT& Info_structureRecu)// string* source, string* dest)
{
if(TEMOIN_CREER_THREAD)
{
QMessageBox::information(0, "TEMOIN_CREER_THREAD", "TEMOIN_CREER_THREAD");
Info_struct_local = Info_structureRecu;
}

qDebug() << "je suis bien dans la fonction copyDirFile";
replace(sourceFolderString.begin(), sourceFolderString.end(), '/','\\');
replace(destFolderString.begin(), destFolderString.end(), '/','\\');

const char* sourceFolder = sourceFolderString.c_str();
const char* destFolder = destFolderString.c_str();

//******************************************
//Si c'est un fichier
FILE* sourceFile = fopen(sourceFolder, "rb");
if(sourceFile != NULL)
{
//On recupère le nom de fichier, on convertit de char a string pour pouvoir faire des manipulations
string baseNameFile = sourceFolder;
baseNameFile = baseNameFile.substr(baseNameFile.find_last_of("\\")+1, baseNameFile.size());
//On crée le fichier final de déstination
……………………..
………………………………………

fclose(sourceFile);

ARG_COPY_FILE Copy_file_struct = {
Copy_file_struct.source = sourceFolder,
Copy_file_struct.destination = destFolderComplet,
};


if(pthread_create(&thread_copy, NULL, &copyFile, (void*)&Copy_file_struct))
return 5;

if(pthread_join(thread_copy, NULL))
return 8;

//majInfos2();

}
//Si ce n'est pas un fichier
else
{
//On doit tester pour savoir si c'est un répertoire, on essayant de l'ouvrir
DIR *dir = opendir(sourceFolder);
struct dirent *ent;
//Si l'ouverture s'est bien déroulée, donc c'est un répertoire
if(dir != NULL)
{
//On récupère la base du nom du répertoire d'origine pour l'utiliser à créer le répertoire de destination.
……………………………………….
//On met le curseur en position 2 pour éviter le (.) et les (..) des répertoires actuel et précédent.
seekdir(dir,2) ;
//On liste tous les élément contenus dans le répertoire
while ((ent = readdir (dir)) != NULL)
{
//On forme le fichier ou le repertoire de déstination, tout dépend de l'élément qu'on va lire
…………………………………………….
//On ouvre le fichier
FILE* fichier = fopen(actualFolderSource, "rb");
ARG_COPY_FILE Copy_file_struct = {
Copy_file_struct.source = actualFolderSource,
Copy_file_struct.destination = destFolderComplet,
//Copy_file_struct.mutex = PTHREAD_MUTEX_INITIALIZER,
};
//Si c'est un fichier
if(fichier != NULL)
{
//*source = sourceFolder; *dest = destFolderComplet;
Maj_struct_local.source = actualFolderSource;
Maj_struct_local.destination = destFolderComplet;

//On crée les thread

if(pthread_create(&thread_copy, NULL, &copyFile, (void*)&Copy_file_struct))
return 5;
if(pthread_join(thread_copy, NULL))
return 8;

fclose(fichier);
}
//Si ce n'est pas un fichier donc c'est surement un réperoire, on appelle donc récursivement la même fonction
else
copyDirFile(actualFolderSource, fullNameDirDest, Info_struct_local);
}
}
//Ce n'esi pas un fichier et ce n'est pas un répertoire
else
return 3;
}
//Si on arrive jusqu'ici, cest que tout est bien passer
return 0;
}
Et voici la fonction copyFile :
void *copyFile(void *arguments)
{
qDebug() << "je suis bien dans la fonction copyFile";
qDebug() << "temoin = " << TEMOIN;
ARG_COPY_FILE *args = (ARG_COPY_FILE *)arguments;
//On définit les fichiers sources et déstination
FILE* fSrc;
FILE* fDest;
char buffer[1024];
int NbLus;
//On ouvre le fichier source
if ((fSrc = fopen(args->source, "rb")) == NULL)
{
//On retourne 1 pour dire que le fichier source n'a pas était ouvert.
pthread_exit(NULL);
}
//On ouvre le fichier destination
if ((fDest = fopen(args->destination, "wb")) == NULL)
{
//On ferme le fichier source
fclose(fSrc);
//On retourne 2 pour dire que le fichier de déstination n'a pas était ouvert
pthread_exit(NULL);
}

//Si tout se passe bien on lit les données du fichier source et on les enregistre dans le fichier de déstination
while ((NbLus = fread(buffer, 1, 1024, fSrc)) != 0)
fwrite(buffer, 1, NbLus, fDest);


//On ferme les deux fichier
fclose(fDest);
fclose(fSrc);

Info_struct_local.textEdit->append("copie de " + QString::fromStdString(Maj_struct_local.source) + " vers " + QString::fromStdString(Maj_struct_local.destination));
//Info_struct_local.textEdit->update();
Info_struct_local.progressBarre->setValue(Info_struct_local.progressBarre->value()+1);
//On retourne 0 pour dire que tout c'est bien passé
pthread_exit(NULL);
}
Le problème c’est que la fenêtre est toujours bloquante.

Et c’est pour cela que j’ai besoin de vos lumières
Merci d’avance pour votre aide.
24/02/2017

Bonne pratique pour sauvegarder une image

Bonjour!

Dans une appli Windows, j'utilise beaucoup QSettings pour sauvegarder les configurations de l'utilisateur.
Je m'en sers également pour exporter ou importer la configuration. Comme ceci, un autre utilisateur peut récupérer toutes les options, et c'est bien pratique.
Parmi ces options, il y a une image. Actuellement, je mets dans le registre le chemin absolu de cette image. Malheureusement on perd l'intérêt de l'exportation, puisque l'image n'est pas forcément au même endroit sur chaque poste.

Je voulais donc l'avis des experts. Est-ce acceptable de copier l'image entière dans les registres ? (ce sont des images < 200Ko, PNG ou JPG d'environ 400*800).
Si non, quelle serait la meilleure solution pour transporter cette image avec la configuration?

Merci pour votre aide

Arnaud
21/02/2017

Discussion a propos des salaires

Cette discussion a été créée à partir de réponses séparées de : Développeur C+++QT/Gui, région parisienne Palaiseau.
24/02/2017

QNetworkAccesManager et ftp

Salut à tous,

Je n'arrive pas à télécharger un fichier en ftp, alors que sur le web on dit que c'est possible.
J'ai toujours cette erreur: QNetworkReply::NetworkError(ContentNotFoundError)

Par contre, en http, aucun problème.
24/02/2017

Partie settings dans le manifest

Bonjour à tous,

Au risque de parler dun sujet sensible ;), j'ai vu dans la documentation (dont le site ne fonctionne plus depuis hier by the way), une partie 'settings' dans les entryPoints du manifest.json.
Quelqu'un pourrait-il expliquer à quoi cela peut servir svp ?

Merci beaucoup.