[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
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
A voir également:
- [QT] comment lancer son programme complet c++
- Lancer un programme au demarrage - Guide
- Télécharger film complet sur mobile - Télécharger - TV & Vidéo
- Programme demarrage windows 10 - Guide
- Saw 1 film complet dailymotion ✓ - Forum Réseaux sociaux
- Lg non programmé ✓ - Forum TV & Vidéo
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
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.
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.
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
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.
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.
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
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
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
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.
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.
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
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