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> CUIソフトウェアの開発において、重要なことは以下に示す3つである。<br> * <code>QCoreApplication::exit</code>メソッドを実行する場合、CUIソフトウェアを終了させることができる。<br>ただし、<code>QCoreApplication::exit</code>を実行するタイミングは、イベントループが実行されている時のみである。 *: <br> * <code>QTimer::singleShot</code>からランナークラスを実行する。 *: <br> * ランナークラスにメイン処理を記述して、任意の地点で<code>QCoreApplication::exit</code>メソッドを実行する。 <br><br> == CUIソフトウェアの開発手順 == 例えば、以下に示すようなコンソールアプリケーションがあるとする。<br> <br> このコンソールアプリケーションは、<code>QCoreApplication</code>クラスの<code>exec</code>メソッドによりアプリケーションは待機状態となり、<br> <code>exit</code>メソッドを呼ぶまで待機を続ける。<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> この待機状態が不要の場合は、アプリケーションを終了する時に任意の地点で<code>exit</code>メソッドを呼ぶランナークラスを作成すればよい。<br> <br> 例えば、以下に示すようなRunnerクラスを定義する。<br> そして、Runnerクラスのrunスロット内にアプリケーションのメイン処理を記述して、処理を終了する時に<code>QCoreApplication</code>クラスの<code>exit</code>メソッドを呼び出す。<br> <syntaxhighlight lang="c++"> // Runner.h #ifndef RUNNER_H #define RUNNER_H #include <QObject> class Runner : public QObject { Q_OBJECT public slots: void run(); // runスロットメソッドにアプリケーションのメイン処理を記述する }; #endif // RUNNER_H </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // Runner.cppファイル #include <QCoreApplication> #include <Runner.h> void Runner::run() { // アプリケーションのメイン処理 // ...略 QCoreApplication::exit(0); // アプリケーションを終了する } </syntaxhighlight> <br> 重要なことは、<code>QTimer</code>クラスの<code>singleShot</code>メソッドのタイムアウト時間を<code>0</code>に設定することである。<br> これは、アプリケーションの全てのイベント (描画処理等) が処理された後に、runメソッドで定義した処理が実行される。<br> <syntaxhighlight lang="c++"> #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(); } </syntaxhighlight> <br><br> == 注釈 == Qt Creatorでコンソールアプリケーションのプロジェクトを新規作成する場合、main関数内において、以下に示すような注釈が記載されている。<br> <br> <syntaxhighlight lang="c++"> // A not very useful example would be including // #include <QTimer> // near the top of the file and calling // QTimer::singleShot(5000, &a, &QCoreApplication::quit); // which quits the application after 5 seconds. // If you do not need a running Qt event loop, remove the call // to a.exec() or use the Non-Qt Plain C++ Application template. </syntaxhighlight> <br> * "A not very useful example" (あまり有用ではない例) *: 注釈の例は、Qtのイベントループの基本的な使用方法を示している。 *: 注釈の例は、単にコンソールアプリケーションを起動して5秒後に終了させるだけなので、実用的なアプリケーションとしては意味がない。 <br> <syntaxhighlight lang="c++"> // 例として挙げられているコード // アプリケーションを5秒後に終了させるタイマを設定する #include <QTimer> QTimer::singleShot(5000, &a, &QCoreApplication::quit); </syntaxhighlight> <br> * 注釈の主旨 *: もし、Qtのイベントループを実行する必要がない場合 (Qtの非同期機能やシグナル / スロットを使用しない場合)、 *: a.execメソッドの呼び出しを削除する、あるいは、「Non-Qt Plain C++ Application」テンプレートを使用することを提案している。 <br> * 注釈の意図 ** 開発者に、プロジェクトの要件を考慮してもらうこと。 ** Qtの機能 (イベントループ等) が本当に必要かどうかを検討してもらうこと。 ** 不必要にQtの機能を使用することにより、アプリケーションが複雑化、または、パフォーマンスに悪影響が出ることを避けること。 <br> * 開発者への指針 *: もし、Qtの高度な機能 (シグナル / スロット、非同期処理等) を使用する予定がある場合は、a.execメソッドを保持してイベントループを実行する。 *: 単純なコンソールアプリケーションで、Qtの特別な機能が不要な場合は、a.execメソッドを削除する、または、純粋なC++アプリケーションとして開発することを検討する。 <br> この注釈は、開発者がプロジェクトの要件を適切に理解して、必要に応じてQtの機能を使用する、あるいは、より単純な構造を選択するかを判断する助けとなる。<br> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Qt]]
Qtの基礎 - CUIソフトウェア
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse