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 versäume, eine QCoreApplication zu erstellen und die Ereignisschleife auszuführen. In den Dokumenten wird angegeben, dass dies in den meisten Fällen empfohlen wird.
Aus Neugier 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 googeln.
Antworten:
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(); }
quelle
QObject::connect(task, &Task::finished, &QCoreApplication::quit);
scheint dies auch zu funktionieren.QCoreApplication::quit
ist ein Slot:QTimer::singleShot(0, &a, SLOT(quit()));
main.moc
du einmain.moc
muss, wird hier beschrieben: stackoverflow.com/questions/34928933/…Vergessen Sie nicht, das hinzuzufügen
Flag in der qmake .pro-Datei.
Im Übrigen werden nur einige der Qt-Klassen verwendet. Eine Möglichkeit, die ich verwende, besteht darin, Prozesse plattformübergreifend zu erzeugen.
quelle
Sie brauchen das
QCoreApplication
überhaupt nicht, fügen Sie einfach Ihre Qt-Objekte wie andere Objekte hinzu, 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; }
quelle
Ich habe es geschafft, mit QT Creator eine einfache Konsole "Hallo Welt" zu erstellen
verwendete Creator 2.4.1 und QT 4.8.0 unter Windows 7
zwei Möglichkeiten, dies zu tun
Einfaches C ++
Mach Folgendes
oder
QT-Konsole
Beispiel: für QT-Konsole "Hallo Welt"
Datei - neue Datei Projekt 'Projektname'
andere Projekte - QT Console Application
Ziele wählen 'Desktop'
Projektmanagement - weiter
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 zum 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, und auch im Www nach Informationen und Beispielen gesucht habe, um mit einfachen Beispielen zu beginnen, die noch suchen ...
quelle
Sie können QCoreApplication :: exit (0) aufrufen, um mit Code 0 zu beenden
quelle
Sie können ein Ereignis auch ohne connect () in den quit () - Slot Ihrer Anwendung auslösen. Auf diese Weise macht die Ereignisschleife mindestens eine Runde 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 Ihrer .pro-Datei zu platzieren oderconsoleApplication: true
in Ihrer .qbs Project.CppApplication festzulegen.quelle
Hatte das gleiche Problem. habe einige Videos auf Youtube gefunden. Hier ist also ein noch einfacherer Vorschlag. Dies ist der gesamte Code, den Sie benötigen:
#include <QDebug> int main(int argc, char *argv[]) { qDebug() <<"Hello World"<< endl; return 0; }
Der obige Code stammt aus dem Qt5-Tutorial: Erstellen einer einfachen Konsolenanwendung von
Dominique Thiebaut
http://www.youtube.com/watch?v=1_aF6o6t-J4
quelle