如何在C++中创建一个简单的Qt控制台应用程序?

neu*_*rte 73 c++ console qt

我试图创建一个简单的控制台应用程序来试用Qt的XML解析器.我在VS2008中启动了一个项目并得到了这个模板:

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

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

由于我不需要事件处理,我想知道如果我忽略创建QCoreApplication并运行事件循环,是否会遇到麻烦.文档声明在大多数情况下建议使用它.

然而,为了好奇,我想知道如何在事件循环上执行一些通用任务然后终止应用程序.我无法谷歌相关的例子.

bay*_*ith 100

如果您希望运行事件循环,可以使用以下一种简单的方法来构建应用程序.

// 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();
}
Run Code Online (Sandbox Code Playgroud)

  • @baysmith在qt5中这个`QObject :: connect(task,&Task :: finished,&QCoreApplication :: quit);`似乎也可以工作. (3认同)
  • 为什么包括`main.moc`? (3认同)

fab*_*ioM 18

别忘了添加

CONFIG += console 
Run Code Online (Sandbox Code Playgroud)

qmake .pro文件中的标志.

其余的只是使用一些Qt类.我使用它的一种方法是跨平台生成进程.