スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Qtのコンソールアプリの基本構造

Qtでコンソールアプリを作る場合に、標準でこんな感じのスケルトンが作成するわけですが、


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

  return a.exec();
}



これをそのまま実行すると、a.execのところでロックになるため、QCoreApplicationのコンストラクタ~a.exec間で処理を追加しても、そのままでは自動では終了しないプログラムになってしまいます。


単純なプログラムであれば下記のようにreturn 0 として、それまでにメインの処理を書けば良いのですが、
Qtのイベント機能は QCoreApplication::exec(); 内でなければイベント関係の機能が使えないなどの問題があります。


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

  // ...

  return 0;
}




そこで、Qtのサンプルコードを参考に、イベント等の機能に対応したコンソールアプリの基本構造を
作ってみました。


#include "stdafx.h"
#include <QtCore/QCoreApplication>
#include <QTimer>

#include "AppMain.h"

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

  AppMain m(0, &a);
  QTimer::singleShot(0, &m, SLOT(run()));

  return a.exec();
}




#include "AppMain.h"

AppMain::AppMain(QObject *parent, QCoreApplication* coreApp)
  : QObject(parent)
  , app(coreApp)
{
}

void AppMain::run()
{
  cout << "app main" << endl;
  getchar();

  app->quit();
}




#include <QtCore/QCoreApplication>
#include <QObject>

class AppMain : public QObject
{
  Q_OBJECT

public:
  AppMain(QObject *parent, QCoreApplication* coreApp);

public slots:
  void run();

private:
  QCoreApplication* app;
};




このコードでは、タイマーイベントを利用してexec内で1度だけメイン処理が実行されるようになっています。

このようにした場合、AppMain::run内で処理を書けばイベントも可能です。

1点気をつけなければならないのは、Cの普通のmain関数と異なり、関数を終了するだけでは、プログラムは
終了されないので、アプリケーションクラスのquitイベントを呼びだして終了させる必要があります。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。