[QT] comment lancer son programme complet c++

Fermé
Lbm - 19 mars 2008 à 04:34
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 20 mars 2008 à 08:36
Bonjour,

Je n'ai pas réussi a trouver la réponse pourtant mon problème est simple.
J'ai un programme c++ assez complexe, et je veux juste faire une petite interface graphique pour le lancer ( une fenêtre ac un bouton "lancer le programme").

Si j'utilise QT designer comment faire pour lier mon programme c++ a l'interface ? je veux que mon main s'exécute quand on clique sur le bouton. En fait, je n'arrive pas a faire le lien entre QT designer et mon programme sous visual c++ 2005.

Sinon sans passer, par Qt designer, dois-je créer une classe dans laquelle le slot, que je relierai au signal de clik, serait le "main" de mon programme c++ qui fonctionne ?

Merci pour votre réponse :)
A voir également:

5 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 mars 2008 à 08:36
Je suis pas coutumier du connect, avec Designer 3, tout se fait tout seul (un tort pour le programmeur, mais une bénédiction pour le néophyte), mais de ce que je voi dans Designer 3, ça serait plutôt :
class MaFenetre : public QWidget
{
...
QButton m_ok;
slot: // je crois qu'il faut déclarer les fonctions qui seront des slots.
int main_prog(){...}
}
puis
MaFenetre MF0;
QObject::connect(m_ok, SIGNAL(clicked()), MF0, SLOT(main_prog());

Dans designer 3, lorsque l'on fait une liaison entre un bouton et une action, l'émetteur est le bouton, le signal clicked(), par contre le receveur est la forme de base (la fenetre ou Widget), et le slot une fonction comprise dans le receveur.
Pour avoir essayé de faire un connect directement, il me semble que la class receveuse doit être dérivé de QObjet ou de QWidget (de mémoire, à confirmer).

Pour pas m'enmerder, je crée un slot lanceprg(), qui contient l'appel au programme main_prg(), cela évite de recopier du code long et compliquer dans la partie QT. Attention, si ton programme est long à terminer et ne rend pas la main immédiatement, le résultat sera que ta fenetre sera figée une fois que tu aura cliquer sur le bouton. Ce que tu peux faire, c'est faire un hide(); dans le slot lanceprg() juste avant ansi le fentre disparait et ainsi, plus de fenetre figé. Ou alors, tu fait un thread (mais alors là bonne chance, autant pthread est super simple, autant avec QT, je galère)

Tout ça, c'est ce que je ferai, mais n'ayant pas beaucoup de connaissances en QT, ne le considère pas comme des conseils, mais comme des solutions possible. Le principal c'est que le programme tourne comme tu veux.
1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 mars 2008 à 08:41
Salut.
Pas très clair ton histoire...
Tu utilise QT designer quelle version ? avec la 3, je peux te dire comment faire facilement, avec la 4, je n'ai pas encore totalement compris.
Par contre, comme tu doit le savoir, tu ne peux avoir qu'un seul main dans un programme.
Ce que je fait dans c'est cas là, c'est renommer le main du programme "complexe" en main_prg par exemple, et de l'appeler ensuite.
Ensuite, quand tu clic sur le bouton, il faut que le signal lance alors la fonction main_prg.
si tu veux, je peux voir pour te faire ta fenêtre avec bouton avec Designer 3, tu n'aura plus qu'a la modifier.
0
Salut,

J'utilise QT 4. Oui je sais qu'il ne doit y avoir qu'un seul main et je compte bien faire comme tu le dis : appeler mon main_prog qd je clique sur le bouton. Mais mon probleme c'est comment faire ce lien ? ou mettre mon code ? Je dessine ma fenetre, ok ... je relis le signal "Clik" a une action, ok ... mais comment et ou je la définis cette action ?

Sinon sans passer par QT designer, je pourrais peut-etre codé directement tt cela sous visual .. non ?

merci de ta réponse.


Mon pb :
Mon programme XXX se compose de plusieurs .cpp, plusieurs .h ... qui sont apelés ds mon main. Je veux une simple fenetre ac bouton qui lance mon programme XXX, c'est a dire qui apelle le main de XXX.



Sylvain
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
19 mars 2008 à 15:30
Bien entendu tu peux te passer de Designer ! C'est juste un tuilitaire pour faire plus facilement les fenetres.
Il est tout à fait possible de passer directement par Visual. Par contre, je ne sais pas si tu arrivera à faire ce que tu veux plus facilement.
Je crois que tu défini les connect (entre slot et signal) dans la class dérivé de widget qui contient le bouton.
Je te conseil de regarder les exemples qui sont donner avec QT, tu y trouvera à coup sur ta réponse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci de ta réponse.

Jpensais faire un slot "main_prog()" dans la classe "mon_application" et le lier a la classe "MaFenetre" , qui hérite de Qwidjet, dans laquelle j'utilise :

Code :
QObject::connect(m_ok, SIGNAL(clicked()), p_prog, SLOT(main_prog());

avec m_ok : - pointeur sur l'objet Qbouton "OK", implémenté ds MaFenetre.
- p_prog : pointeur sur l'objet mon_application, implémenté ds le main.

Le slot "main_prog()" contiendrait tout mon ex-programme principal

Qu'en pensez-vous?

Sylvain
0