Qt 5记录 - 使用QLoggingCategory定义类别

时间:2015-10-15 08:48:42

标签: qt logging qt5 qstring const-char

我遇到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
    }
}

为什么我的计算类别名称不起作用?

1 个答案:

答案 0 :(得分:2)

QLoggingCategory保留了char*指针的副本,用于构建它。指向的字符必须在QLoggingCategory实例的生命周期内保持有效和恒定。

在失败的示例中,c_str()返回一个临时值,该值在std::string超出范围后不再有效。所以QLoggingCategory现在指向无效的内存(给你未定义的行为)。

在第二个示例中,您传递一个字符串文字,该字符串文字在程序的生命周期内有效,因此不会出现生命周期问题。

您需要将字符串数据复制到char数组中,其生命周期比日志记录类别更长。