1

我在我的应用程序中安装了一个简单的 QtMessageHandler:

void handleMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QString text = msg;

    QString path = QCoreApplication::applicationDirPath() + "/logging/logs.txt";

    QFile logFile(path);
    logFile.open(QIODevice::WriteOnly | QIODevice::Append);
    QTextStream textStream(&logFile);
    textStream<< text << endl << flush;
}

int main(int argc, char *argv[])
{
    qInstallMessageHandler(handleMessage);

    // ...

    for (int i = 0; i < 10000000; i++) {
        qDebug() << "Some text";
    }

    // ...
}

现在,当我使用 qDebug 将一些日志写入日志文件时(应用程序什么也不做!),内存使用量正在上升。当我停止写日志时,它会回落,但永远不会回到以前的值。每几千条消息,内存就会增加几百千字节并保持不变。

我认为是 QTextStream 导致了这种情况,因为如果我将那部分注释掉,那么内存使用率就会很低。

我尝试将 myMessageHandler 函数移动到一个单独的类并将 QTextStream 作为成员变量,而不是在每次调用 myMessageHandler() 时创建它,但是我无法让 qInstallMessageHandler() 工作。

int main(int argc, char *argv[])
{
    MyMessageHandler myMessageHandler;
    qInstallMessageHandler(myMessageHandler.handleMessage);
}

这给了我:

cannot convert 'MyMessageHandler::handleMessage' from type 'void (MyMessageHandler::)(QtMsgType, const QMessageLogContext&, const QString&)' to type 'QtMessageHandler {aka void (*)(QtMsgType, const QMessageLogContext&, const QString&)}'qInstallMessageHandler(myMessageHandler.handleMessage);

任何人都知道如何解决这个问题?

4

0 回答 0