第一代软件开发(二)

简介: 欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资

头图

第一代软件开发(二)

[toc]

关键字: QtQmlQSerialPortQPixmapQSoundEffect

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏更新到第三代软件开发时将转为收费专栏

界面布局

image-20230707222542339

如上图所示,整个软件布局基本就是汉堡结构,上中下,左中右结构,有了这些,就构成了这个软件的基本操作逻辑了,这个也是咱充前辈那里面借鉴学习来的。最上面就是主菜单按钮,软件系统名称,主要功能选择Tab,编辑病历按钮。设备状态按钮和帮助按钮。中间从左到右为主菜单按钮,快捷功能栏,快捷功能菜单,中心曲线显示区域,两个控制模块,一个光学模块和一个预留模块以及病人编辑模块。最下方及时基本的状态栏,从左到右基本为软件版本,U盘插入图标和系统时间。

那么剩下的工作就是完善这些功能以及子模块了。

功能完善

因为第一代已经是好久的事情了,所以咱们这里基本就是把基本的框架聊聊,直接带带功能点咱就过了哈。重点还是研究咱第三代的东西。

快照功能

为什么不叫截图呢,因为在我理解看来,截图是可以鼠标截取任意位置的像素保存成图片的,而目前我们的功能就只把指定区域的像素保存成图片再往细了说就是把某个控件保存成图片。直接上代码

void MainWindow::snapshot()
{
    //    mMonitor_kernel_1->setMode(1);
    //    mMonitor_kernel_2->setMode(1);
    mPix = new QPixmap(ui->widget_monitor->grab(QRect(0,0,ui->widget_monitor->width(),ui->widget_monitor->height())));                                  // 获取谁的RGB
    QString filePathName = "./temp/";
    /**
     *
     * 这里需要增加参数字段
     */
    filePathName += QDateTime::currentDateTime().toString("hhmmsszzz");
    filePathName += ".png";
    if(!mPix->save(filePathName,"png"))
    {
        qDebug()<<"病历快照保存失败";
    }
    mReport_Kernel->inseartPic(filePathName);
    //    mMonitor_kernel_1->setMode(0);
    //    mMonitor_kernel_2->setMode(0);
}

获取可用串口

因为串口咱用的就是Qt 提供的QSerialPort类,那些基本设置咱就不说了,百度一大堆了,咱说下我们业务中的一个需求,获取可用的串口,并进行自动连接。

代码如下

void XXXXX::getAvailableSerialPort(QStringList &comlist)
{
    /**
     * 01 先清空设备列表
     */
    comlist.clear();
    /**
     * 02 遍历设备数,查找符号条件的串口
     * 这里感觉比较耗时,取决于当前设备上串口数量
     */
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        QSerialPort serial;
        serial.setPort(info);
        if((QString::compare(info.description(),&COM_Description,Qt::CaseSensitive) == 0))
        {
            if(serial.open(QIODevice::ReadWrite))
            {
                comlist.append(info.portName());
                serial.close();
            }
        }
    }
    /**
     * 03 根据串列表中的数量,进行不同的处理
     * 如果有且仅有一个设备,则直接进行连接
     * 如果有多个,这需要通过协议握手,来确定设备
     */
    if(!comlist.isEmpty())
    {
        if(comlist.count() == 1)
        {
            if(flag_AutoConnectSerialPort)
                openSerialPort(comlist.at(0));
        }
        else
        {
            /**
             * 这里应该是当设备列表里面有多个 CH340 串口设备时,通过一个握手函数,连确定那个设备时真整的设备
             * 暂时应该还遇不到,不做处理,当遇到多个设备,默认连接第一个
             */
            openSerialPort(comlist.at(0));
            qDebug() << "两个以上同名设备,默认就链接第一个接口" << LOGINFOR;
        }
        qDebug() << "手柄链接成功"<< LOGINFOR;
        if(mAutoConnectTimer)
            if(mAutoConnectTimer->isActive())
                mAutoConnectTimer->stop();
    }
    else
    {
        emit signal_Serial_NoAvailableDevicesFound();
        if(mAutoConnectTimer)
            if(!mAutoConnectTimer->isActive())
                mAutoConnectTimer->start(30);
    }
}

播放按键提示音

正式项目中,咱学聪明了哈,不在用QMediaPlayer来播放提示音了,而是用了QSoundEffect,用法和QMediaPlayer没啥差别,代码如下

void XXXX::slot_InitAudioThread()
{
    soundEffect = new QSoundEffect;
    soundEffect->setSource(QUrl("qrc:/T_Audio/systemStart.wav"));
    soundEffect->setLoopCount(1);
    soundEffect->play();

    soundEffectButton = new QSoundEffect;
    soundEffectButton->setSource(QUrl("qrc:/T_Audio/buttonTach.wav"));                                  // 这里使用QSoundEffect的时候,对wav的码率有要求,测试192是没有问题
    soundEffectButton->setLoopCount(1);

    soundEffectBee = new QSoundEffect;
    soundEffectBee->setSource(QUrl("qrc:/T_Audio/bee.wav"));
    soundEffectBee->setLoopCount(1);
}

博客签名2021

相关文章
|
7月前
|
中间件 编译器 调度
嵌入式软件架构基础设施设计方法
嵌入式软件架构基础设施设计方法
178 0
|
1月前
|
机器学习/深度学习 人工智能 前端开发
2024年软件开发新趋势:关键技术和实践
2024年软件开发迎来新趋势,涵盖AI/ML深度集成、微前端架构进展、单元测试最佳实践及CI/CD最新动态,推动产品质量、效率和创新的提升。
|
2月前
|
机器学习/深度学习 人工智能 安全
2024年软件开发新趋势
【10月更文挑战第1天】2024年的软件开发领域正迎来诸多革新趋势。本篇文章深入探讨了这些变化,包括人工智能与机器学习的深度集成、区块链技术的应用、多运行时微服务的兴起,以及AR/VR技术在各行业的广泛采用。同时,网络安全成为焦点,从被动防御转向主动防护,如DevSecOps和零信任架构的普及。此外,文章还强调了可持续软件开发的重要性,提倡绿色计算以应对日益严峻的环境挑战。
|
数据可视化 算法 开发工具
第一代软件开发(一)
> 欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 > > 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 > > 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于
|
运维 监控 算法
第一代软件开发(三)
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
搜索推荐 前端开发 Linux
第二代软件开发
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
开发框架 数据可视化 数据库
第一代软件系统架构
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
XML 网络协议 Java
SOA系统架构的演变
SOA系统架构的演变
145 0
|
供应链 数据可视化 Java
国产技术迎来突破,14nm芯片横空出世,低代码也有好消息
国产技术迎来突破,14nm芯片横空出世,低代码也有好消息
166 0
|
运维 前端开发 数据库
语音聊天软件开发,熟知软件架构的演进很重要
语音聊天软件开发,熟知软件架构的演进很重要