我想为Qt GUI应用程序添加一个调试模式。在调试模式下,任何GUI小部件事件都会转储调试信息而不是执行原始功能。例如,点击button A
会打印出所选的复选框选项,其中button A
的原始功能会处理所选选项。
我正在考虑添加一个菜单选项“debug mode
”,或者启用它的秘密键盘快捷键。在与小部件信号(clicked
/ textEdited
)相关联的回调函数中,使用if(isDebugMode)/else
来区分常规函数模式代码。
这是测试GUI功能的好模型吗?还有更好的办法吗?
答案 0 :(得分:1)
您可能希望使用Signal / Slot系统进行调试。它让我想起了面向方面的编程。
Debug
类派生自QObject
,其中包含几个带有典型签名的插槽。QObject::sender()
功能检索事件的发起人这将帮助您保持大部分代码清理调试内容。
为了获得灵感,下面是一些跟踪应用程序中焦点变化的示例代码:
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();