我遇到QLoggingCategory(const char * category)
的问题。
当我使用它时:
QString rt = "3";
QString sv = "P";
QLoggingCategory dailyLogger(QString(rt+sv+"Logger").toStdString().c_str());
它不起作用(我的自定义消息处理程序无法识别此类别)。
但是当我使用时:
QLoggingCategory dailyLogger("3PLogger");
消息处理程序可以看到类别。
这是处理函数:
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
if (QString(context.category).contains("3"))
{
//some code
}
}
为什么我的计算类别名称不起作用?
答案 0 :(得分:2)
QLoggingCategory
保留了char*
指针的副本,用于构建它。指向的字符必须在QLoggingCategory
实例的生命周期内保持有效和恒定。
在失败的示例中,c_str()
返回一个临时值,该值在std::string
超出范围后不再有效。所以QLoggingCategory
现在指向无效的内存(给你未定义的行为)。
在第二个示例中,您传递一个字符串文字,该字符串文字在程序的生命周期内有效,因此不会出现生命周期问题。
您需要将字符串数据复制到char
数组中,其生命周期比日志记录类别更长。