2

我有一个问题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
    }
}

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

4

1 回答 1

2

QLoggingCategorychar*保留构造它的指针的副本。指向的字符必须在QLoggingCategory实例的生命周期内保持有效和不变。

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

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

您需要将字符串数据复制到char一个生命周期超过日志记录类别的数组中。

于 2016-05-13T10:56:13.020 回答