gpt4 book ai didi

c++ - 为 Qt 项目创建标志或使用 QLoggingCategory

转载 作者:行者123 更新时间:2023-11-28 05:52:12 25 4
gpt4 key购买 nike

这是我在这个网站上的第一个问题,我希望我会做的很好。

我正在做一个使用大量信号和槽的 Qt 项目,我想创建一个标志/宏/变量来激活/停用 std::cout 的使用来跟踪哪个信号是发出并激活哪个插槽

这是为了调试目的,了解应用程序的不同组件如何交换并避免信号/槽中的循环。

更具体地说,我会在我的 .pro 中有一个标志/变量:

QT_SIGNALS_SLOTS_LOG = true

在我的源代码中:

if(QT_SIGNALS_SLOTS_LOG)
std::cout << "MyClass::slotMySlot activated" << std::endl;

问题:

1. 我可以做类似的事情吗(在 代码)?

2.有更好的方法吗?


更新 1

Burich,这很好用,谢谢

现在我将尝试编写一个 Qt 宏,我将其放入插槽中并完成所有工作

示例:

Q_SIGNALS_SLOTS_LOG();

获取 Class 和 Slot 的名称并执行

ifdef QT_SIGNALS_SLOTS_LOG
std::cout << "MyClass::slotMySlot activated" << std::endl;
endif

有没有办法做到这一点?


更新 2

我用了QLoggingCategory Class有了这个tutorial

我的 Utils 文件夹中有一个包含此代码的类

#ifndef SIGNALSLOTDEBUG_H
#define SIGNALSLOTDEBUG_H
#include<QLoggingCategory>


Q_DECLARE_LOGGING_CATEGORY(logSignal)
Q_DECLARE_LOGGING_CATEGORY(logSlot)

inline static void debugSlotF( char const * caller_name )
{
qCDebug(logSlot) << __TIME__ << caller_name << "activated";
}

inline static void debugSlot(){

}

#define debugSlot() debugSlotF(__PRETTY_FUNCTION__)

#endif // SIGNALSLOTDEBUG_H

在我的代码中我只是调用

void HorizontalPatternListScene::slotSelectionChanged(int i)
{
debugSlot();
....

我得到这个输出:

log.slot: 12:06:54 void HorizontalPatternListScene::slotSelectionChanged(int) activated

我可以通过做来禁用流

QLoggingCategory::setFilterRules(
"log.slot=true\n"
"log.signal=false");

在我的 main.cpp 中

最佳答案

在 pro 中设置变量:

DEFINES += QT_SIGNALS_SLOTS_LOG

在代码中测试它:

#ifdef QT_SIGNALS_SLOTS_LOG
std::cout << "MyClass::slotMySlot activated" << std::endl;
#endif

关于c++ - 为 Qt 项目创建标志或使用 QLoggingCategory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com