Qml写日志

作者: zhengtianzuo | 来源:发表于2018-11-29 20:20 被阅读0次

    大家都知道通过Q_INVOKABLE可以让qml直接访问c++类的接口函数.

    void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
    {
        static QMutex mutex;
        mutex.lock();
    
        QString text;
        switch(type)
        {
        case QtDebugMsg:
            text = QString("Debug:");
            break;
    
        case QtWarningMsg:
            text = QString("Warning:");
            break;
    
        case QtCriticalMsg:
            text = QString("Critical:");
            break;
    
        case QtFatalMsg:
            text = QString("Fatal:");
        }
    
        QString message = "";
        if (context.file != nullptr)
        {
            QString context_info = QString("File:(%1) Line:(%2)").arg(QString(context.file)).arg(context.line);
            QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
            QString current_date = QString("(%1)").arg(current_date_time);
            message = QString("%1 %2 %3 %4").arg(text).arg(context_info).arg(msg).arg(current_date);
        }
        else
        {
            message = msg;
        }
    
        QFile file("log.txt");
        file.open(QIODevice::WriteOnly | QIODevice::Append);
        QTextStream text_stream(&file);
        text_stream << message << "\r\n";
        file.flush();
        file.close();
    
        mutex.unlock();
    }
    
    QmlLog4Qml::QmlLog4Qml()
    {
        qInstallMessageHandler(outputMessage);
    }
    
    void QmlLog4Qml::qDebug_Info(int type, QString strInfo)
    {
        QMessageLogContext context;
        context.file = nullptr;
        outputMessage((QtMsgType)type, context, strInfo);
    }
    
    show.jpg

    需要完整代码请访问QtQuickExamples

    相关文章

      网友评论

        本文标题:Qml写日志

        本文链接:https://www.haomeiwen.com/subject/xfkqcqtx.html