ログファイルとメッセージダイアログ出力
まだエラーメッセージダイアログは出せません。
アプリケーションの動作ログを出力する機能とエラーメッセージダイアログを出力する機能って似てますよね。 エラーを表示したら、そのログはログファイルに残っていて欲しいですが、ダイアログに出すほどのものでもないメッセージもログファイルには残したい時もあります。
こういう機能を持った部品があるとうれしいですね。
LogMessageクラスをこういうクラスにしたいです…、どうしたらいいんでしょうかね…
最初はこのLogMessageクラスにいろいろな変数や関数をどんどん書こうかと思いました。で、実際に書いたら、もう面倒になるほどいろいろ書かないといけないことに気づきました。
こんなこと、Qtで開発している人がみなやってるのかと疑問に思い、「入門Qt4プログラミング」を眺めます。
「おお」
なんだか詳細は分かりませんが、継承というテクニックを使えば良さそうです。
つまり、QtのQMessageBoxというクラス(部品)を取り込んで、これを拡張する形で、ログファイルにも出力する機能を追加すればよさそうです。
継承の恩恵がイマイチ、ピンとこなかったのですが、こういうことなんですねぇ。
大体こんな感じでしょうか?
[logmessage.h]
[logmessage.cpp]
今はcriticalなメッセージを扱うcriticalMessage()という関数しか追加していないのですがQMessageBoxの関数とか変数とかも同じように使えます。criticalMessage()にはまだダイアログを出す処理しか書いてません、別途受け取った引数を元にログファイルにログを出力する機能を追加しなくてはなりませんね。ま、ベースはできたので、少しづつ実装します。
アプリケーションの動作ログを出力する機能とエラーメッセージダイアログを出力する機能って似てますよね。 エラーを表示したら、そのログはログファイルに残っていて欲しいですが、ダイアログに出すほどのものでもないメッセージもログファイルには残したい時もあります。
こういう機能を持った部品があるとうれしいですね。
LogMessageクラスをこういうクラスにしたいです…、どうしたらいいんでしょうかね…
最初はこのLogMessageクラスにいろいろな変数や関数をどんどん書こうかと思いました。で、実際に書いたら、もう面倒になるほどいろいろ書かないといけないことに気づきました。
こんなこと、Qtで開発している人がみなやってるのかと疑問に思い、「入門Qt4プログラミング」を眺めます。
「おお」
なんだか詳細は分かりませんが、継承というテクニックを使えば良さそうです。
つまり、QtのQMessageBoxというクラス(部品)を取り込んで、これを拡張する形で、ログファイルにも出力する機能を追加すればよさそうです。
継承の恩恵がイマイチ、ピンとこなかったのですが、こういうことなんですねぇ。
大体こんな感じでしょうか?
[logmessage.h]
// -*- mode: c++; coding: utf-8-unix -*- // Copyright (c) 2014 FunFun <fu.aba.dc5@gmail.com> #ifndef LOGMESSAGE_H #define LOGMESSAGE_H // System Header // Qt Header #include <QMessageBox> #include <QString> // Local Header namespace brynhildr { // phase ID typedef enum { PHASE_BRYNHILDR = 0, PHASE_CONTROL, PHASE_GRAPHICS, PHASE_SOUND, PHASE_NUM } PHASE_ID; class LogMessage : public QMessageBox { public: // constructor LogMessage(QWidget *parent); // critical message int criticalMessage(PHASE_ID id, const QString text, StandardButton buttons, StandardButton defaultButton); }; } // end of namespace brynhildr #endif // LOGMESSAGE_H
[logmessage.cpp]
// -*- mode: c++; coding: utf-8-unix -*- // Copyright (c) 2014 FunFun <fu.aba.dc5@gmail.com> // System Header // Qt Header #include <QString> // Local Header #include "logmessage.h" #include "settings.h" namespace brynhildr { // phase name QString phaseName[PHASE_NUM] = { QObject::tr("[brynhildr] "), QObject::tr("[control] "), QObject::tr("[graphics] "), QObject::tr("[sound] "), }; LogMessage::LogMessage(QWidget *parent) { } // critical message int LogMessage::criticalMessage(PHASE_ID id, const QString text, StandardButton buttons, StandardButton defaultButton) { int ret; // output dialog ret = critical(this, QTB_APPLICATION, phaseName[id] + text, buttons, defaultButton); // TODO: output Log File return ret; } } // end of namespace brynhildr
今はcriticalなメッセージを扱うcriticalMessage()という関数しか追加していないのですがQMessageBoxの関数とか変数とかも同じように使えます。criticalMessage()にはまだダイアログを出す処理しか書いてません、別途受け取った引数を元にログファイルにログを出力する機能を追加しなくてはなりませんね。ま、ベースはできたので、少しづつ実装します。
« 進捗記録 2014.6.12 | トップページ | ログファイルの機能を追加する オープンとクローズ »
コメント