我试图创建一个简单的控制台应用程序来试用Qt的XML解析器。我在VS2008中开始了一个项目并得到了这个模板:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
return a.exec();
}
由于我不需要事件处理,我想知道如果我忽略创建QCoreApplication并运行事件循环,是否会遇到麻烦。文档声明它在大多数情况下都是推荐的。
然而,为了好奇,我想知道如何在事件循环上执行一些通用任务然后终止应用程序。我无法谷歌相关的例子。
答案 0 :(得分:92)
如果您希望运行事件循环,可以使用以下一种简单的方法来构建应用程序。
// 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();
}
答案 1 :(得分:18)
不要忘记添加
CONFIG += console
在qmake .pro文件中标记。
其余的只是使用一些Qt类。 我使用它的一种方法是跨平台生成流程。
答案 2 :(得分:4)
您根本不需要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;
}
答案 3 :(得分:3)
我设法用QT Creator
创建一个简单的控制台“hello world”在Windows 7上使用了创建者2.4.1和QT 4.8.0
两种方法
Plain C ++
执行以下操作
或
QT控制台
示例:对于QT控制台“hello world”
file - 新文件项目'项目名称'
其他项目 - QT控制台应用程序
目标选择'桌面'
项目管理 - 下一步
代码:
#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运行
用于上述MSVC 2010(QT SDK)和minGW(QT SDK)的编译器
希望这有助于某人
由于我刚刚开始使用QT并且还搜索了Www以获取信息和示例以开始使用仍在搜索的简单示例......
答案 4 :(得分:1)
您可以调用QCoreApplication :: exit(0)退出代码0
答案 5 :(得分:0)
即使没有connect(),您也可以将事件触发到应用程序的quit()插槽中。 这样,事件循环至少旋转一圈,并应在main()-logic中处理事件:
#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();
}
请不要忘记将CONFIG += console
放在.pro文件中,或将consoleApplication: true
放在.qbs Project.CppApplication中。
答案 6 :(得分:-1)
有同样的问题。在Youtube上发现了一些视频。 所以这是一个更简单的建议。这是您需要的所有代码:
#include <QDebug>
int main(int argc, char *argv[])
{
qDebug() <<"Hello World"<< endl;
return 0;
}
以上代码来自 Qt5教程:通过
构建一个简单的控制台应用程序Dominique Thiebaut