从QT创建者C ++内部调用Python文件方法

时间:2018-07-12 12:48:00

标签: python c++ qt qt-creator

嗨。 我需要你的帮助。因此,我正在创建一个qt桌面应用程序,并且需要在te项目中从python文件调用函数方法。

所以,我的python文件:

    import logging
import os
from time import gmtime, strftime

class Logger():

    LOG_TO_FILE=True

    @staticmethod                        
    def currentTime():
        return strftime("%Y-%m-%d %H:%M:%S", gmtime())

    @staticmethod                        
    def log(msg):    
        print msg
        Logger.saveToFile(msg)

    @staticmethod                        
    def info(label, msg):    
        msg = "%s Info  : [%s] -> %s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg

    @staticmethod                        
    def debug(label, msg):
        msg =  "%s Debug : [%s] -> %s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg

    @staticmethod                        
    def warning(label, msg):
        msg = "%s Warn  : [%s] -> %s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg

    @staticmethod                        
    def critical(label, msg):
        msg = "%s Critic : [%s] -> %s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg

    @staticmethod                        
    def error(label, msg):
        msg = "%s Error : [%s] -> %s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg
        #log.critical(msg)

    @staticmethod                        
    def data(label, msg):    
        msg = "%s Data  : [%s] -> \t%s" % (Logger.currentTime(), label, msg)      
        Logger.saveToFile(msg)
        print msg

    @staticmethod                        
    def saveToFile(message):
        if Logger.LOG_TO_FILE is True:

            if os.path.exists('/var/log/iot-pi') is not True:
                os.makedirs('/var/log/iot-pi')

            try:
                filePath='/var/log/iot-pi/main.log'
                f = open(filePath,'a')
                f.write(message + '\n')
                f.close()

                bytes = os.path.getsize(filePath)
                if bytes >= 10000000:
                    os.remove(filePath)
                    Logger.info("SYSTEM", "Log file removed")
            except Exception as inst:
                print "save to file error (%s)" % inst


if __name__ == "__main__":
    Logger.info("Test", "Message test")

我的主要cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[]) {
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    //call Logger.py here ?? it's possible ?

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec(); }

那么,有一种获取功能的模式,例如C ++中来自Qt后端的警告方法吗? 我已经在项目中添加了python库。我需要“仅”从py文件获取def。我不能使用其他文件,我需要调用python文件。

我使用qt 5.11。 谢谢。

0 个答案:

没有答案