我试图创建一个简单的控制台应用程序来试用Qt的XML解析器。我在VS2008中启动了一个项目,并获得了以下模板:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
return a.exec();
}
因为我不需要事件处理,所以我想知道如果我忽略了创建QCoreApplication并运行事件循环,我是否会遇到麻烦。文档中指出,在大多数情况下都是推荐的。
不过,出于好奇,我想知道如何在事件循环上执行一些通用任务,然后终止应用程序。我无法在谷歌上搜索到相关的例子。
发布于 2010-11-15 15:06:54
如果你想运行一个事件循环,这里有一种简单的构建应用程序的方法。
// 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();
}
发布于 2010-11-15 12:15:01
别忘了添加
CONFIG += console
qmake .pro文件中的标志。
因为其余的只是使用一些Qt类。我使用它的一种方式是产生跨平台的进程。
发布于 2010-11-15 08:02:17
您根本不需要QCoreApplication
,只需像包含其他对象一样包含您的Qt对象,例如:
#include <QtCore>
int main()
{
QVector<int> a; // Qt object
for (int i=0; i<10; i++)
{
a.append(i);
}
/* manipulate a here */
return 0;
}
https://stackoverflow.com/questions/4180394
复制相似问题