Qt 5日志-定义类别与QLoggingCategory



我对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数组中,该数组的生存期要比日志分类的生存期长。

相关内容

  • 没有找到相关文章

最新更新