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++相关代码。