Qtの基礎 - CUIソフトウェア
ナビゲーションに移動
検索に移動
概要
Qtは、GUIソフトウェアを開発するために使用されているが、CUIソフトウェアも開発できる。
ただし、CUIは[閉じる]ボタンのように終了する機能が無いため、ソフトウェアから適当なタイミングで閉じるようにしなければならない。
ここでは、Qtにおける基本的なCUIソフトウェアの開発手順を記載する。
CUIソフトウェアの開発手順
例えば、以下に示すようなコンソールアプリケーションがあるとする。
このコンソールアプリケーションは、QCoreApplication
クラスのexec
メソッドによりアプリケーションは待機状態となり、
exit
メソッドを呼ぶまで待機を続ける。
int main(int argc, char * argv[])
{
QCoreApplication a(argc, argv);
int count = 1000;
while(--count) {
printf("Count = %d\n", count);
}
return a.exec();
}
この待機状態が不要の場合は、アプリケーションを終了する時に任意の地点でexit
メソッドを呼ぶランナークラスを作成すればよい。
例えば、以下に示すようなRunnerクラスを定義する。
そして、Runnerクラスのrunスロット内にアプリケーションのメイン処理を記述して、処理を終了する時にQCoreApplication
クラスのexit
メソッドを呼び出す。
// Runner.h
#ifndef RUNNER_H
#define RUNNER_H
#include <QObject>
class Runner : public QObject
{
Q_OBJECT
public slots:
void run(); // runスロットメソッドにアプリケーションのメイン処理を記述する
};
#endif // RUNNER_H
// Runner.cppファイル
#include <QCoreApplication>
#include <Runner.h>
void Runner::run()
{
// アプリケーションのメイン処理
// ...略
QCoreApplication::exit(0); // アプリケーションを終了する
}
重要なことは、QTimer
クラスのsingleShot
メソッドのタイムアウト時間を0
に設定することである。
これは、アプリケーションの全てのイベント (描画処理等) が処理された後に、runメソッドで定義した処理が実行される。
#include <QCoreApplication>
#include <QTimer>
#include "Runner.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// ランナー開始
Runner runner;
QTimer::singleShot(0, &runner, SLOT(run()));
return a.exec();
}
まとめ
上記のセクションにおいて、CUIソフトウェアの開発手順について記載したが、重要なことは以下の3つである。
QApplication::exit
を呼び出すとCUIソフトウェアが終了できる。QTimer::singleShot
からランナークラスを実行する。- ランナークラスにメイン処理を記述して、任意の地点で
exit
関数を実行する。