Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment utiliser Qt + l'api win32

Sujet résolu
24 juillet 2012 à 21:08:50

Bonsoir, j'aimerais savoir si il était possible d'utiliser l'api win32 en plus de Qt dans un seul et même programme(à priori oui) et comment le faire ?
Pour créer un programme avec Qt, le main est différent d'une application c++ tout court:

#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
 
    return app.exec();
}


tandis que l'autre en utilise un aussi...

#include <windows.h>

int WinMain (
                HINSTANCE cetteInstance,
                HINSTANCE precedenteInstance,
                LPSTR lignesDeCommande,
                int modeDAffichage
            )
{
   return 0;
}


Ainsi peut-on l'utiliser uniquement en incluant windows.h ? Et ensuite appeler ses capacités dans une fonction comme si de rien n'était et laisser notre main de Qt intacte ?

Merci d'avance.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
24 juillet 2012 à 21:32:27

Sur Windows Qt défini WinMain qui appelle main, utilise l'api windows, et fourni quelques méthodes pour l'utiliser (QWidget::winEvent par exemple).
  • Partager sur Facebook
  • Partager sur Twitter
24 juillet 2012 à 22:07:13

Merci de ta réponse, malgré cela je ne pense pas saisir ce que tu tentes de m'expliquer..

Citation

Citation : mcarton

Sur Windows Qt défini WinMain qui appelle main



Comment fait-on cela ? Peux-tu m'expliquer plus en profondeur le principe ?

Citation : mcarton

et fourni quelques méthodes pour l'utiliser (QWidget::winEvent par exemple).



C'est à dire ? On appelle des fonctions à travers ce genre de méthodes ?.. Désolé de mon incompréhension mais je ne suis pas allé beaucoup plus loin que le tutoriel de C++ disponible sur le site.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
24 juillet 2012 à 22:33:23

Citation : Pspgame

Comment fait-on cela ? Peux-tu m'expliquer plus en profondeur le principe ?

Je t'ai donné un lien vers les sources de Qt qui font ça. En virant tout ce qui concerne WinCE ça donne :
#include "qt_windows.h"
#include "qbytearray.h"
#include "qstring.h"
#include "qvector.h"

/*
  This file contains the code in the qtmain library for Windows.
  qtmain contains the Windows startup code and is required for
  linking to the Qt DLL.

  When a Windows application starts, the WinMain function is
  invoked. WinMain calls qWinMain in the Qt DLL/library, which
  initializes Qt.
*/

QT_BEGIN_NAMESPACE

extern void qWinMain(HINSTANCE, HINSTANCE, LPSTR, int, int &, QVector<char *> &);

QT_END_NAMESPACE

QT_USE_NAMESPACE

extern "C" int main(int, char **);

/*
  WinMain() - Initializes Windows and calls user's startup function main().
  NOTE: WinMain() won't be called if the application was linked as a "console"
  application.
*/

extern "C"
int APIENTRY WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR /*cmdParamarg*/, int cmdShow)
{
    QByteArray cmdParam = QString::fromWCharArray(GetCommandLine()).toLocal8Bit();

    int argc = 0;
    QVector<char *> argv(8);
    qWinMain(instance, prevInstance, cmdParam.data(), cmdShow, argc, argv);

    int result = main(argc, argv.data());
    return result;
}
Qt écrit pour toi la fonction WinMain, qui crée argc et argv et appelle la fonction main comme n'importe quelle autre fonction, ce qui évite de devoir réécrire du code selon que tu es sur Windows/Linux/Mac/autre. Sur Linux/Mac/autre soit Qt écrit une fonction du même genre si besoin est, soit main est appelée directement.

Citation : Pspgame

C'est à dire ? On appelle des fonctions à travers ce genre de méthodes ?.. Désolé de mon incompréhension mais je ne suis pas allé beaucoup plus loin que le tutoriel de C++ disponible sur le site.

Tu peux appeler les fonctions de l'api windows n'importe où tant que ça a du sens, mais Qt fourni certaines choses pour intéragir avec cet api, comme QWidget::winId qui fourni (sur windows) un HWND associé au widget ou QWidget::winEvent qui est appelé lorsqu'un événement natif Windows est émis.
  • Partager sur Facebook
  • Partager sur Twitter
25 juillet 2012 à 0:29:06

Citation : mcarton

Qt écrit pour toi la fonction WinMain, qui crée argc et argv et appelle la fonction main comme n'importe quelle autre fonction, ce qui évite de devoir réécrire du code selon que tu es sur Windows/Linux/Mac/autre. Sur Linux/Mac/autre soit Qt écrit une fonction du même genre si besoin est, soit main est appelée directement.



D'accord merci...donc concrêtement je ne change pas le main habituel de Qt si ce n'est que j'ajoute windows.h ?

Merci de tes réponses et de ta patience..
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
25 juillet 2012 à 11:11:42

Citation : Pspgame

D'accord merci...donc concrêtement je ne change pas le main habituel de Qt si ce n'est que j'ajoute windows.h ?

Oui.
  • Partager sur Facebook
  • Partager sur Twitter
3 septembre 2024 à 12:44:36 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


3 septembre 2024 à 13:36:18

@DoumbiaSiaka1 Bonjour, merci de ne pas squatter le sujet résolu des autres, créer votre propre sujet dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (Un bonjour ou des salutations à la communauté et se termine par des remerciements par avances pour les futures réponses), la description de votre problème et le code que vous avez écrit inséré sur le forum à l'aide de l'outil d'intégration de code soit le bouton code </>

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter