Как мне создать простое консольное приложение Qt на C ++? - PullRequest
67 голосов
/ 15 ноября 2010

Я пытался создать простое консольное приложение, чтобы опробовать анализатор XML Qt.Я запустил проект в VS2008 и получил этот шаблон:

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

    return a.exec();
}

Поскольку мне не нужна обработка событий, мне было интересно, могу ли я столкнуться с проблемами, если я пренебрегаю созданием QCoreApplication и запуском цикла обработки событий,Документы утверждают, что это рекомендуется в большинстве случаев.

Однако, для любопытства, мне интересно, как я могу заставить какую-то общую задачу выполнить цикл обработки событий, а затем завершить приложение.Мне не удалось найти соответствующий пример в Google.

Ответы [ 7 ]

94 голосов
/ 15 ноября 2010

Вот один простой способ структурировать приложение, если вы хотите запустить цикл обработки событий.

// 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();
}
18 голосов
/ 15 ноября 2010

Не забудьте добавить

CONFIG += console 

флаг в файле qmake .pro.

В остальном - просто использование некоторых классов Qt. Один из способов, которым я его использую, - это создание кроссплатформенных процессов.

4 голосов
/ 15 ноября 2010

Вам вообще не нужен 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 голосов
/ 24 марта 2012

Мне удалось создать простую консоль "Hello World" с QT Creator

использовал создатель 2.4.1 и QT 4.8.0 на windows 7

два способа сделать это

Обычный C ++

сделать следующее

  1. Файл - новый файл проекта
  2. по проектам выберите: другой проект
  3. выберите «Простой проект C ++»
  4. введите название проекта 5.Targets выберите рабочий стол «Tick It»
  5. Управление проектами просто нажмите Далее
  6. вы можете использовать команды c ++ как обычно c ++

или

QT Console

  1. Файл - новый файл проекта
  2. под проекты выберите: другой проект
  3. выберите Консольное приложение QT
  4. Цели выберите Рабочий стол 'tick it'
  5. Управление проектами просто нажмите Далее
  6. добавьте следующие строки (все, что вам нужно в C ++)
  7. добавить "#include 'iostream'"
  8. добавить "using namespace std;"
  9. после QCoreApplication a (int argc, cghar * argv []) 10 добавить переменные и код вашей программы ..

пример: для консоли 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 информацию и примеры, чтобы начать с простых примеров, все еще ищущих ...

1 голос
/ 15 ноября 2010

Вы можете вызвать QCoreApplication :: exit (0) для выхода с кодом 0

0 голосов
/ 19 ноября 2018

Вы можете запустить событие в слот quit () вашего приложения даже без connect (). Таким образом, цикл обработки событий выполняет как минимум один ход и должен обрабатывать события в вашей 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.CppApplication.

0 голосов
/ 15 марта 2014

Была такая же проблема. нашел несколько видео на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...