代码之家  ›  专栏  ›  技术社区  ›  neuviemeporte

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

  •  65
  • neuviemeporte  · 技术社区  · 14 年前

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

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        return a.exec();
    }
    

    因为我不需要事件处理,所以我想知道如果忽略创建QCoreApplication和运行事件循环,是否会遇到麻烦。文件上说在大多数情况下这是推荐的。

    不过,出于好奇,我想知道如何在事件循环上执行一些通用任务,然后终止应用程序。我无法在谷歌上找到相关的例子。

    7 回复  |  直到 14 年前
        1
  •  100
  •   baysmith    14 年前

    下面是一种简单的方法,如果您希望运行事件循环,可以构造应用程序。

    // 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();
    }
    
        2
  •  18
  •   fabmilo    14 年前

    别忘了加上

    CONFIG += console 
    

    qmake.pro文件中的标志。

    因为剩下的只是使用一些Qt类。 我使用它的一种方法是跨平台生成进程。

        3
  •  4
  •   Simon Walker    14 年前

    你不需要 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;
    }
    
        4
  •  3
  •   code    13 年前

    我用QT Creator创建了一个简单的控制台“hello world”

    在Windows7上使用了creator 2.4.1和Qt4.8.0

    两种方法

    普通C++

    执行以下操作

    1. 文件-新建文件项目
    2. 在“项目”下选择:其他项目
    3. 选择“普通C++项目”
    4. 输入项目名称 5.目标选择桌面“勾选”
    5. 项目管理只需单击下一步
    6. 您可以将c++命令用作普通c++

    QT控制台

    1. 文件-新建文件项目
    2. 在“项目”下选择:其他项目
    3. 选择QT控制台应用程序
    4. 目标选择桌面“勾选”
    5. 项目管理只需单击下一步
    6. 添加下面的行(所有C++包括你需要的)
    7. 添加“include‘iostream’”
    8. 添加“using namespace std;”
    9. 在QCoreApplication a之后(int argc,cghar*argv[]) 10添加变量,你的程序代码。。

    示例:对于QT控制台“hello world”

    文件-新文件项目“项目名称”

    其他项目-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上的信息和示例,开始使用仍然在搜索的简单示例。。。

        5
  •  1
  •   Andrew    14 年前

    您可以调用QCOReAp:::EXIT(0)以代码0退出

        6
  •  0
  •   UnePierre    6 年前

    即使没有connect(),也可以将事件激发到应用程序的quit()插槽中。 这样,事件循环至少执行一次循环,并应在main()逻辑中处理事件:

    #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.cpp应用程序中。

        7
  •  -1
  •   Validus Oculus    11 年前

    也有同样的问题。在Youtube上找到了一些视频。 所以这里有一个更简单的建议。这就是你需要的全部代码:

    #include <QDebug>
    
    int main(int argc, char *argv[])  
    {
       qDebug() <<"Hello World"<< endl;
       return 0;
    }
    

    以上代码来自 Qt5教程:通过

    多米尼克反刍动物

    http://www.youtube.com/watch?v=1_aF6o6t-J4

    推荐文章