wake-up-neo.com

Wie erstelle ich eine einfache Qt-Konsolenanwendung in C++?

Ich habe versucht, eine einfache Konsolenanwendung zu erstellen, um den XML-Parser von Qt auszuprobieren. Ich habe ein Projekt in VS2008 gestartet und diese Vorlage erhalten:

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

    return a.exec();
}

Da ich keine Ereignisverarbeitung benötige, habe ich mich gefragt, ob ich möglicherweise Probleme bekomme, wenn ich es unterlassen würde, eine QCoreApplication zu erstellen und die Ereignisschleife auszuführen. Die Dokumente geben an, dass dies in den meisten Fällen empfohlen wird.

Aus Neugierde frage ich mich jedoch, wie ich eine generische Aufgabe in der Ereignisschleife ausführen und dann die Anwendung beenden könnte. Ich konnte kein relevantes Beispiel finden.

64
neuviemeporte

Hier ist eine einfache Möglichkeit, eine Anwendung zu strukturieren, wenn eine Ereignisschleife ausgeführt werden soll.

// 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

Vergessen Sie nicht, die 

CONFIG += console 

fahne in der qmake .pro-Datei.

Für den Rest werden nur einige Qt-Klassen verwendet. Eine Möglichkeit, wie ich es benutze, ist, Prozesse plattformübergreifend zu erzeugen.

18
fabrizioM

Sie brauchen die Variable QCoreApplication gar nicht, sondern schließen Sie Ihre Qt-Objekte genauso ein wie andere Objekte, zum Beispiel:

#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

Es ist mir gelungen, mit QT Creator eine einfache Konsole "Hallo Welt" zu erstellen

benutzte Schöpfer 2.4.1 und QT 4.8.0 unter Windows 7

zwei Möglichkeiten, dies zu tun 

Normales C++

mach Folgendes

  1. Datei - neues Dateiprojekt
  2. wählen Sie unter Projekte: anderes Projekt
  3. wählen Sie "Plain C++ Project" aus. 
  4. geben Sie den Projektnamen .__ ein. 5.Tickets Wählen Sie den Desktop aus.
  5. projektverwaltung einfach auf Weiter klicken
  6. sie können C++ - Befehle als normales C++ verwenden 

oder 

QT Console

  1. Datei - neues Dateiprojekt
  2. wählen Sie unter Projekte: anderes Projekt
  3. wählen Sie QT Console Application 
  4. Ziele wählen Desktop 'tick it'
  5. projektverwaltung einfach auf Weiter klicken
  6. fügen Sie die folgenden Zeilen hinzu (alle erforderlichen C++ - Dateien)
  7. füge "#include 'iostream'" hinzu
  8. add "using namespace std;"
  9. nach der QCoreApplication fügen Sie Variablen hinzu (int argc, cghar * argv []).

beispiel: für QT-Konsole "Hallo Welt"

datei - neues Dateiprojekt 'Projektname'

andere Projekte - QT-Konsolenanwendung

Ziele wählen 'Desktop'

projektmanagement - als nächstes

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();
     }

strg -R ausführen 

compiler für MSVC 2010 (QT SDK) und minGW (QT SDK)

hoffe das hilft jemandem

Da ich gerade erst angefangen habe, QT zu verwenden, habe ich auch im Internet nach Informationen und Beispielen gesucht, um mit einfachen Beispielen zu beginnen.

3
code

Sie können QCoreApplication :: exit (0) aufrufen, um den Code 0 zu verlassen

1
Andrew

Sie können ein Ereignis auch ohne connect () ..__ in den quit () - Slot Ihrer Anwendung auslösen. Auf diese Weise führt die Ereignisschleife mindestens einen Zug aus und sollte die Ereignisse in Ihrer main () - Logik verarbeiten:

#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();
}

Vergessen Sie nicht, CONFIG += console in Ihre .pro-Datei einzufügen, oder setzen Sie consoleApplication: true in Ihr .qbs Project.CppApplication.

0
UnePierre