我对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
}
}
为什么我的计算类别名称不工作?
QLoggingCategory
保留了一个char*
指针的副本。指向的字符必须在QLoggingCategory
实例的生命周期内保持有效和恒定。
在失败的示例中,c_str()
返回一个在std::string
超出范围后不再有效的临时对象。所以QLoggingCategory
现在指向无效的内存(给你未定义的行为)。
在第二个示例中,您传递了一个字符串字面值,它在程序的生命周期内有效,因此不会出现生命周期问题。
您需要将字符串数据复制到char
数组中,该数组的生存期要比日志分类的生存期长。