web-dev-qa-db-fra.com

Comment créer une application console Qt simple en C++?

J'essayais de créer une application console simple pour essayer l'analyseur XML de Qt. J'ai démarré un projet dans VS2008 et j'ai obtenu ce modèle:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    return a.exec();
}

Comme je n'ai pas besoin de traitement des événements, je me demandais si je pourrais avoir des problèmes si je néglige de créer une QCoreApplication et d'exécuter la boucle d'événements. La documentation indique que c'est recommandé dans la plupart des cas.

Par curiosité, je me demande cependant comment faire en sorte qu'une tâche générique s'exécute sur la boucle d'événements, puis ferme l'application. Je suis incapable de google un exemple pertinent.

64
neuviemeporte

Voici un moyen simple de structurer une application si vous souhaitez exécuter une boucle d’événements.

// main.cpp
#include <QtCore>

class Task : public QObject
{
    Q_OBJECT
public:
    Task(QObject *parent = 0) : QObject(parent) {}

public slots:
    void run()
    {
        // Do processing here

        emit finished();
    }

signals:
    void finished();
};

#include "main.moc"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // Task parented to the application so that it
    // will be deleted by the application.
    Task *task = new Task(&a);

    // This will cause the application to exit when
    // the task signals finished.    
    QObject::connect(task, SIGNAL(finished()), &a, SLOT(quit()));

    // This will run the task from the application event loop.
    QTimer::singleShot(0, task, SLOT(run()));

    return a.exec();
}
91
baysmith

N'oubliez pas d'ajouter le 

CONFIG += console 

indicateur dans le fichier qmake .pro.

Pour le reste, nous n'utilisons que certaines classes Qt. L’une des méthodes que j’utilise est de générer des processus multi-plateformes.

18
fabrizioM

Vous n'avez pas du tout besoin de QCoreApplication, incluez simplement vos objets Qt comme d'autres objets, par exemple

#include <QtCore>

int main()
{
    QVector<int> a; // Qt object

    for (int i=0; i<10; i++)
    {
        a.append(i);
    }

    /* manipulate a here */

    return 0;
}
4
Simon Walker

J'ai réussi à créer une console simple "Bonjour tout le monde" avec QT Creator

créateur utilisé 2.4.1 et QT 4.8.0 sur Windows 7

deux façons de le faire 

C++ simple

faire ce qui suit

  1. Fichier - nouveau projet de fichier
  2. sous projets, sélectionnez: autre projet
  3. sélectionnez "Projet Plain C++" 
  4. entrez le nom du projet 5.Targets sélectionnez Desktop 'tick it'
  5. gestion de projet, cliquez simplement sur suivant
  6. vous pouvez utiliser les commandes c ++ comme c ++ normal 

ou 

Console QT

  1. Fichier - nouveau projet de fichier
  2. sous projets, sélectionnez: autre projet
  3. sélectionnez l'application de la console QT 
  4. Cibles sélectionnez Desktop 'cochez-le'
  5. gestion de projet, cliquez simplement sur suivant
  6. ajoutez les lignes suivantes (tout le C++ inclut ce dont vous avez besoin)
  7. ajouter "#include 'iostream'"
  8. ajouter "using namespace std;"
  9. après QCoreApplication a (int argc, cghar * argv []) 10 ajouter des variables et votre code de programme ..

exemple: pour la console QT "hello world"

file - nouveau projet de fichier 'nom du projet'

autres projets - QT Console Application

Cibles sélectionnez 'Bureau'

gestion de projet - next

code:

    #include <QtCore/QCoreApplication>
    #include <iostream>
    using namespace std;
    int main(int argc, char *argv[])
    {
     QCoreApplication a(argc, argv);
     cout<<" hello world";
     return a.exec();
     }

ctrl -R pour courir 

compilateurs utilisés pour MSVC 2010 (SDK) et minGW (SDK).

espérons que cela aide quelqu'un

Comme je viens juste de commencer à utiliser QT récemment et que je cherche aussi sur le Www des informations et des exemples pour commencer avec des exemples simples, toujours à la recherche ...

3
code

Vous pouvez appeler QCoreApplication :: exit (0) pour quitter avec le code 0

1
Andrew

Vous pouvez déclencher un événement dans l'emplacement quit () de votre application même sans connect () . Ainsi, la boucle d'événements effectue au moins un tour et doit traiter les événements dans votre logique main ():

#include <QCoreApplication>
#include <QTimer>

int main(int argc, char *argv[])
{
    QCoreApplication app( argc, argv );

    // do your thing, once

    QTimer::singleShot( 0, &app, &QCoreApplication::quit );
    return app.exec();
}

N'oubliez pas de placer CONFIG += console dans votre fichier .pro ou de définir consoleApplication: true dans votre .qbs Project.CppApplication.

0
UnePierre