Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.7.1 - Qt Creator : 4.2.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] Ufile returnfile=emit firstFile(); marche pas?

Bonjour, j'ai défini une structure de donnée:
typedef struct Ufile Ufile;
struct Ufile
{
QString source;
QString size;
QString destination;
};
Et dans mon code j'ai:
Ufile returnfile=emit firstFile();
cout << qPrintable(returnfile.source) << "\n";
J'ai connecter mon slot au signal:
connect(CopyThread, SIGNAL(firstFile()), this, SLOT(firstFile()));
Puis j'ai déclarer mon slot:
Ufile Main_window::firstFile()
{
Ufile returnfile;
returnfile.source=QString("source");
returnfile.size=QString::number(1234);
returnfile.destination=QString("destination");
cout << qPrintable(returnfile.source) << "\n";
return returnfile;
}
Et la surprise?! Et bien ça marche pas. Pourquoi? Si non quel est le meilleur moyen de faire ce que je veux si je peu pas passer par le return? J'ai penser passer par des pointeurs, mais que si je peu pas faire comme j'avais prévu de faire.

Réponses

  • Pourquoi ça ne marche pas ? règle de base : signaux et slots n'ont pas de valeur de retour. Logique : si ton signal n'est connecté à aucun slot, qu'obtiendras tu ? pareil si ton signal est connecté à >1 slots...

    si tu as vraiment besoin de faire passer une information de l'un à l'autre, passe l'information en tant qu'argument du signal/slot, soit en pointeur soit en référence non-const. Mais ça ne résoudra pas le problème ci-dessus, et ça ne fait qu'indiquer un problème dans ton design.

    D'autre part, je n'aimerais pas avoir à bosser sur ton code... super le nommage firstFile() identique pour le signal et le slot, vachement facile pour s'y retrouver après. Tu pourrais au moins renommer l'un des deux. En général le signal est toujours sous la forme "somethingHappened()", par exemple "stateChanged()" ou "fileCopied()".
    typedef struct Ufile Ufile;
    On est en C++, pas en C ;-)
  • romain-kdab said:
    D'autre part, je n'aimerais pas avoir à bosser sur ton code... [...]
    super le nommage firstFile() vachement facile pour s'y retrouver après [...]
    On est en C++, pas en C
    Romain,

    Tes remarques sont tout à fait justifiées et leur qualité technique (comme tes compétences dans le domaine) ne font aucun doute.

    Néanmoins, le ton sur lequel les posts sont formulés est important aussi. Maintenir sur ce forum une ambiance des plus cordiale est une priorité. Donc merci d'éviter à l'avenir ce qui pourrait être perçu comme une attaque personnelle ou un jugement de valeur. N'oublions pas que chacun d'entre nous a commencé par être un débutant ;)
  • En effet, en relisant après coup je suis d'accord avec toi. Désolé, et toutes mes excuses à alpha_one_x86 si je l'ai offensé.

    J'oublie des fois qu'il y a principalement des hobbyistes et des débutants sur ce forum.
    Mea Culpa :-|
  • Je l'ai pas mal pris et comme je l'ai déjà dit je ne suis pas contre la critique justifié, Tu as souligné un point important, que je vais de ce pas corriger dans ton mon code.
    J'essaye de structurer au mieux mon code pour que tout le monde puisse s'y retrouver.Donc l'implémentation de la copie par kio_slave ce retrouve plus dur que ce que j'avais prévu.
Connectez-vous ou Inscrivez-vous pour répondre.