MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの基礎 - CUIソフトウェアのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの基礎 - CUIソフトウェア
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtは、GUIソフトウェアを開発するために使用されているが、CUIソフトウェアも開発できる。<br> ただし、CUIは[閉じる]ボタンのように終了する機能が無いため、ソフトウェアから適当なタイミングで閉じるようにしなければならない。<br> <br> ここでは、Qtにおける基本的なCUIソフトウェアの開発手順を記載する。<br> <br><br> == CUIソフトウェアの開発手順 == 例えば、以下のようなCUIソフトウェアのソースコードを記述したとする。<br> <syntaxhighlight lang="c++"> int main(int argc, char * argv[]) { QCoreApplication a(argc, argv); int count = 1000; while(--count) { printf("Count = %d\n", count); } return a.exec(); } </syntaxhighlight> <br> 上記のソースコードでは、CUIソフトウェアの場合は永遠に終了しないプログラムになってしまう。<br> なぜなら、<code>QApplication</code>の<code>exec</code>関数は、<code>exit</code>関数が呼ばれるまでループし続けるからである。<br> <br> これを解決するには、主の処理が終了する時、任意の地点で<code>exit</code>関数を呼び出すランナークラスを作成すればよい。<br> 例えば、以下のようなCUIRunnerクラスを定義する。<br> <syntaxhighlight lang="c++"> // CUIRunner.h #ifndef CUIRUNNER_H #define CUIRUNNER_H #include <QObject> class CUIRunner : public QObject { Q_OBJECT public slots: void run(); // runスロットメソッド内部でメイン処理を実行する }; #endif // CUIRUNNER_H </syntaxhighlight> <br> CUIRunnerクラスのrunスロットメソッドにおいて、メイン処理を記述して、処理を終了する時にexit関数を呼び出せばよい。<br> <syntaxhighlight lang="c++"> // runメソッドの定義 #include <QCoreApplication> #include <CUIRunner.h> void CUIRunner::run() { // メイン処理 // ...略 QCoreApplication::exit(0); // 閉じる(ループから抜ける) } </syntaxhighlight> <br> ここで重要なことは、QTimerクラスのsingleShotメソッドのタイムアウト時間を0に設定していることである。<br> このように記述すると、ウインドウシステムの全てのイベント(描画処理等)が処理された後に、runメソッドで定義した処理が実行される。<br> <syntaxhighlight lang="c++"> #include <QCoreApplication> #include <QTimer> #include <CUIRunner.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // ランナー開始 CUIRunnaer runner; QTimer::singleShot(0, &runner, SLOT(runner.run())); return a.exec(); } </syntaxhighlight> <br><br> == まとめ == 上記のセクションにおいて、CUIソフトウェアの開発手順について記載したが、重要なことは以下の3つである。<br> * <code>QApplication::exit</code>を呼び出すとCUIソフトウェアが終了できる。 * <code>QTimer::singleShot</code>からランナークラスを実行する。 * ランナークラスにメイン処理を記述して、任意の地点で<code>exit</code>関数を実行する。 <br><br> __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - CUIソフトウェア
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse