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.
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();
}
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.
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;
}
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
oder
QT Console
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.
Sie können QCoreApplication :: exit (0) aufrufen, um den Code 0 zu verlassen
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.