• step6:改用单例模式


    文章介绍

    案例MF改为单例模式
    参考之前写过的关于单例模式的文章单例模式1单例模式2

    code

    main.cpp

    在这里插入图片描述

    qmlRegisterSingletonType(“com.example.serialport”, 1, 0, “SerialPortHandler”, SerialPortHandlerGetInstance);

    SerialPort.qml

    • 导入模块
      在这里插入图片描述
    • 调用SerialPortHandler类

    在这里插入图片描述

    SerialPortHandler.h

    在这里插入图片描述
    在这里插入图片描述

    #ifndef SERIALPORTHANDLER_H
    #define SERIALPORTHANDLER_H
    
    #include 
    #include 
    #include 
    #include 
    #include 
    
    class SerialPortHandler : public QObject
    {
        Q_OBJECT
        Q_PROPERTY(bool isSerialPortOpen READ isSerialPortOpen NOTIFY serialPortOpenChanged)
    
    public:
        // 获取单例实例
        static SerialPortHandler* getInstance() {
            static SerialPortHandler instance;  // 确保只有一个实例
            return &instance;
        }
    
        explicit SerialPortHandler(QObject *parent = nullptr);
        ~SerialPortHandler();  // 析构函数
    
        Q_INVOKABLE void openSerialPort(const QString &portName);  // 打开指定串口
        Q_INVOKABLE void closeSerialPort();  // 关闭串口
        Q_INVOKABLE QStringList getAvailablePorts() const;  // 获取可用串口列表
    
        bool isSerialPortOpen() const;  // 检查串口是否打开
    
    signals:
        void serialPortOpened();  // 串口打开信号
        void serialPortOpenChanged();  // 串口状态改变信号
        void dataReceived(const QString &data);  // 数据接收信号
    
    private slots:
        void readData();  // 读取数据槽函数
    
    public slots:
        void sendData(const QString &data);  // 发送数据槽函数
    
    private:
        QSerialPort serialPort;  // 串口对象
        bool m_isSerialPortOpen;  // 串口打开状态
    
        // 禁用拷贝构造函数和赋值操作符
        Q_DISABLE_COPY(SerialPortHandler)
    };
    
    // 单例获取函数声明
    static QObject* SerialPortHandlerGetInstance(QQmlEngine *engine, QJSEngine *scriptEngine) {
        Q_UNUSED(engine)
        Q_UNUSED(scriptEngine)
        return SerialPortHandler::getInstance();
    }
    
    #endif // SERIALPORTHANDLER_H
    
    
  • 相关阅读:
    Typora和基本的Markdown语法
    web前端开发--------CSS基础教程
    TiDB 6.0:让 TSO 更高效丨TiDB Book Rush
    JVM进阶(2)
    C语言,洛谷题:你的飞碟在这
    XML学习笔记
    2022-9-4QT实现迷你闹铃(定时播报指定内容)
    AI绘图—对中文拟合度很高,值得一试
    五大常用算法——贪心算法详解及经典例子
    [ACP云计算]组件介绍
  • 原文地址:https://blog.csdn.net/summer__7777/article/details/140016131