qt编写程序自启动串口数据错乱问题

我qt编写的程序,手动启动没有问题,但是设置自启动后就数据错乱,有跟我遇到过类似问题的吗.我是任务计划启动的

手动启动打开exe文件,则启动目录为exe所在目录。任务计划启动,则启动目录为系统目录。如果你的代码中配置文件使用的是相对路径,而非绝对路径,那么就可能存在配置文件读取失败,从而导致一些串口参数设置失败。

程序启动有加载什么文件吗

【相关推荐】



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/1063771
  • 你也可以参考下这篇文章:qt中获取打开文件路径,颜色对话框,字体对话框,自定义对话框,消息对话框,输入对话框
  • 您还可以看一下 沈寒老师的Qt程序设计基础课程中的 Qt字符串操作小节, 巩固相关知识点
  • 除此之外, 这篇博客: 关于Qt实现类反射的一些思考与总结中的 一、Qt怎么实现反射实例化的? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    这里有2种办法,参考:《

    Qt通过类名称创建类的实例的两种方法

    第一种,注册元数据类型,通过类型id实例化

    class Animal 
    { 
    public:
        virtual void voice();
    }
    class Dog : public Animal
    { 
    public:
        virtual void voice();
    };
    
    // 注册类型
    qRegisterMetaType<Dog>("Dog");
    
    // 实例化
    int id = QMetaType::type("Dog");
    Animal *animal = static_cast<Animal*>(QMetaType::create(id));
    

    第二种,通过QMetaObject::newInstance函数实例化

    class Animal : QObject
    { 
    public:
        virtual void voice();
    }
    class Dog : public Animal
    { 
        Q_OBJECT
    public:
        Q_INVOKABLE Dog();
        virtual void voice();
    };
    
    // 注册类型
    QMap<QString, QMetaObject> metaMap;
    metaMap.insert("Dog", Dog::staticMetaObject);
    
    // 实例化
    Animal *animal = static_cast<Animal*>(metaMap.value("Dog").newInstance());
    

    此种方式,限制条件:

    • 必须继承自QObject;
    • 必须添加Q_OBJECT宏;
    • 必须对构造函数添加Q_INVOKABLE宏。

    疑问:反射实例化时,如何传参?

    在这里插入图片描述

    定义Car类

    class Car : public QObject
    {
        Q_OBJECT
    public:
        Q_INVOKABLE Car(int a, double b)
        {
            qDebug() << "Car():" << a << b;
        }
    };
    

    测试反射传参,newInstance最多支持10个参数。

    // 注册类型
    QMap<QString, QMetaObject> metaMap;
    metaMap.insert("Car", Car::staticMetaObject);
    
    // 实例化
    metaMap.value("Car").newInstance(Q_ARG(int, 5), Q_ARG(double, 3.6));
    

    运行结果:

    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^