デバッグには Signal/Slot システムを使用することをお勧めします。アスペクト指向プログラミングを思い出します。
- 典型的なシグネチャを持ついくつかのスロットを保持
Debug
する派生クラスを作成します。QObject
- これらのスロットで、
QObject::sender()
関数を使用してイベントの発信元を取得します
- 元の受信機に加えて、すべての信号をデバッグ スロットに接続します。これは、デバッグ モード フラグの条件で実行されるコード ブロックで行います。
- Qt オブジェクトから追加の信号を接続して、アプリケーションの状態を追跡できるようにします。たとえば、ボタンがチェックボックス オプションを読み取る場合は、チェックボックスからの変更信号もデバッグ スロットに接続して、ボタンがクリックされたときに前の出力から状態を読み取ることができるようにします。
- (元のアクションを実行したくない場合は、今度は逆に、デバッグ フラグを均等に条件付けて信号を接続するだけです。)
これは、コードの大部分をデバッグ用のものからきれいに保つのに役立ちます。
参考までに、アプリケーション内でフォーカスの変更を追跡するサンプル コードを次に示します。
debug.hpp
class Debug : public QObject
{
Q_OBJECT
...
// method for debugging focus
void focusChange(QWidget * old, QWidget * now);
};
debug.cpp
void Debug::focusChange(QWidget *old, QWidget *now)
{
if (!old || !now)
return;
std::cerr << "Focus changed from " << old->objectName().toStdString()
<< " to " << now->objectName().toStdString() << std::endl;
}
main.cpp
QApplication app(argc, argv);
Debug dbg;
...
app.connect(&app, SIGNAL(focusChanged(QWidget*, QWidget*)),
&debug, SLOT(focusChange(QWidget*, QWidget*)));
// run Qt event loop
return app.exec();