Golang + Qt5.13.0将QML错误信息输入到日志中

以下为Golang解决方案代码,照搬即可

package qlog

/*
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "qdebug.h"
*/
import "C"
import (
    "Ygs-PQES/log"
    "strings"
)

const (
    QtDebugMsg    = 0
    QtInfoMsg     = 1
    QtWarningMsg  = 2
    QtCriticalMsg = 3
    QtFatalMsg    = 4
    QtSystemMsg   = QtCriticalMsg
)

func init() {
    C.goqdebug_InstallMessageHandler()
}

func goqdebug_cGoUnpackString(s C.struct_QtCore_PackedString) string {
    if int(s.len) == -1 {
        return C.GoString(s.data)
    }
    return C.GoStringN(s.data, C.int(s.len))
}

//export goqdebug_GoMessageHandler
func goqdebug_GoMessageHandler(cmsg C.struct_QtCore_PackedString, msg_type int) {
    msg := goqdebug_cGoUnpackString(cmsg)
    msg_mark := "DEBUG"
    if msg_type == QtDebugMsg {
        msg_mark = "DEBUG"
    } else if msg_type == QtInfoMsg {
        msg_mark = "INFO"
    } else if msg_type == QtWarningMsg {
        msg_mark = "WARNING"
    } else if msg_type == QtCriticalMsg {
        msg_mark = "CRITICAL"
    } else if msg_type == QtFatalMsg {
        msg_mark = "FATAL"
    } else {
        msg_mark = "UNKNOWN"
    }
    //屏蔽Qt5.13.0的错误警告,此警告对性能和功能都没有影响
    if !strings.Contains(msg, "is less than 0") {
        log.Logger.Info(msg_mark + ":" + msg)
    }
}

func Init() {
    C.goqdebug_test()
}

Golang将其编译为C++相关代码。