Debugging Qt-GUI应用程序的调试模式

Debugging Qt-GUI应用程序的调试模式,debugging,qt4,Debugging,Qt4,我想为QtGUI应用程序添加一个调试模式。在调试模式下,任何GUI小部件事件都会转储调试信息,而不是执行原始功能。例如,单击按钮A将打印出所选的复选框选项,其中按钮A的原始功能是对所选选项进行处理 我想添加一个菜单选项“debug mode”,或者一个秘密键盘快捷键来启用它。在与小部件信号相关联的回调函数中(单击/文本编辑),使用if(isDebugMode)/else来区分常规函数模式代码 这是测试GUI功能的好模型吗?有没有更好的方法?您可能希望使用信号/插槽系统进行调试。它让我想起了面向方

我想为QtGUI应用程序添加一个调试模式。在调试模式下,任何GUI小部件事件都会转储调试信息,而不是执行原始功能。例如,单击
按钮A
将打印出所选的复选框选项,其中
按钮A
的原始功能是对所选选项进行处理

我想添加一个菜单选项“
debug mode
”,或者一个秘密键盘快捷键来启用它。在与小部件信号相关联的回调函数中(
单击
/
文本编辑
),使用
if(isDebugMode)/else
来区分常规函数模式代码


这是测试GUI功能的好模型吗?有没有更好的方法?

您可能希望使用信号/插槽系统进行调试。它让我想起了面向方面编程

  • 编写一个从
    QObject
    派生的
    Debug
    类,该类包含几个具有典型签名的插槽
  • 在这些插槽中,使用
    QObject::sender()
    函数检索事件的发起人
  • 将所有信号连接到调试插槽,并附加到其原始接收器。在调试模式标志条件下运行的代码块中执行此操作
  • 连接来自Qt对象的其他信号,以便跟踪应用程序的状态。例如,如果按钮读取复选框选项,还应将复选框中的更改信号连接到调试插槽,以便您可以在单击按钮时从以前的输出中读取其状态
  • (如果您不希望执行原始操作,只需将信号连接同等地置于调试标志上,这次则相反。)
  • 这将帮助您保持大部分代码中没有调试内容

    以下是一些示例代码,用于跟踪应用程序中的焦点更改:

    debug.hpp debug.cpp
    class Debug : public QObject
    {
        Q_OBJECT
        ...
        // method for debugging focus
        void focusChange(QWidget * old, QWidget * now);
    };
    
    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;
    }
    
    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();