QT Creator写一个简单的电压电流显示器

这篇具有很好参考价值的文章主要介绍了QT Creator写一个简单的电压电流显示器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要涉及上位机对接收的串口数据处理,LCD Number控件的使用。之前的一篇写一个简单的LED控制主要是串口发出数据,这里再看一下怎么接收数据处理数据,这样基本就对串口上位机有简单的认识了。

LCD Number显示时间

这一小节通过用一个LCD Number实时显示时间的例程认识一下LCD Number控件。

新建一个widget示例工程,前面的文章都有相关内容,请移步查阅,这里不赘述。

双击widget.ui打开 Qt 设计器界面,拉一个LCD Number到合适位置
QT Creator写一个简单的电压电流显示器
拉大一点:
QT Creator写一个简单的电压电流显示器
这里说一下QT开发的大概模式,和C# 开发很像,这里是.ui文件是UI设计,同时相关源文件配合,如果UI设计不能直接设置的,就必须通过源码实现,当然UI设计器主要还是设置控件的位置大小颜色和一些基本参数之类的。ui文件是可有可无的,即使没有ui文件,完全通过代码添加控件,设定控件参数位置等也是完全可行的。

其余的就按下面的代码改一下就行了。

整体源码:
widget.cpp文件:

#include "widget.h"
#include "ui_widget.h"


Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    /* 设置显示的位数 8 位 */
    ui->lcdNumber->setDigitCount(8);
    /* 设置样式 */
    ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat);

    /* 设置 lcd 显示为当前系统时间 */
    QTime time = QTime::currentTime();

    /* 设置显示的样式 */
    ui->lcdNumber->display(time.toString("hh:mm:ss"));

    timer = new QTimer(this);
    /* 设置定时器 1000 毫秒发送一个 timeout()信号 */
    timer->start(1000);

    /* 信号槽连接 */
    connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));

}

Widget::~Widget()
{
    delete ui;
}

void Widget::timerTimeOut()
{
    /* 当定时器计时 1000 毫秒后,刷新 lcd 显示当前系统时间 */
    QTime time = QTime::currentTime();
    /* 设置显示的样式 */
    ui->lcdNumber->display(time.toString("hh:mm:ss"));
}

widget.h文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLCDNumber>
#include <QTimer>
#include <QTime>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

    /* 声明 QTimer 对象 */
    QTimer *timer;

private slots:
   /* 槽函数 */
   void timerTimeOut();
};
#endif // WIDGET_H

其余文件保持默认。

效果:
QT Creator写一个简单的电压电流显示器

串口数据处理,LCD Number显示电压电流

串口协议是JSON格式:类似{“Cur”:118,“Vol”:7587},电流单位mA,电压单位mV

双击.ui文件打开UI设计器,通过拖动的方式添加控件,如下图所示放置,红色框是Label,蓝色框是Combo Box,黄色框是两个Push Button,棕色框是LCD Number,其中的文字都可在放置控件后双击改之:
QT Creator写一个简单的电压电流显示器

串口部分与这篇文章相似:QT C++入门学习(2) QT Creator写一个简单的上位机控制LED,可作参考

Label可以通过font属性调整字体和大小:
QT Creator写一个简单的电压电流显示器
LCD Number可以通过digitCount属性设定最大显示位数,这里保持默认5位即可:
QT Creator写一个简单的电压电流显示器

.pro文件中添加串口模块:
QT Creator写一个简单的电压电流显示器
程序源码:
widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLCDNumber>
#include <QSerialPort>
#include <QSerialPortInfo>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    QSerialPort *serialPort;//定义串口指针

private slots:

    /*以下为widget.ui文件中点击“转到槽”自动生成的函数*/
    void on_openBt_clicked();

    void on_btnSerialCheck_clicked();

    void DateRead();

};
#endif // WIDGET_H

widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#include <QDebug>
//解析json格式类
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QStringList serialNamePort;

    serialPort = new QSerialPort(this);

    ui->serailCb->clear();
    //通过QSerialPortInfo查找可用串口
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->serailCb->addItem(info.portName());
    }
    connect(serialPort,SIGNAL(readyRead()),this,SLOT(DateRead()));/*手动连接槽函数*/

}

/*打开串口*/
void Widget::on_openBt_clicked()
{

    // 初始化串口属性,设置 端口号、波特率、数据位、停止位、奇偶校验位数
    serialPort->setPortName(ui->serailCb->currentText());
    serialPort->setBaudRate(ui->baundrateCb->currentText().toInt());
    serialPort->setDataBits(QSerialPort::Data8);
    serialPort->setStopBits(QSerialPort::OneStop);
    serialPort->setParity(QSerialPort::NoParity);

    // 根据初始化好的串口属性,打开串口
    // 如果打开成功,反转打开按钮显示和功能。打开失败,无变化,并且弹出错误对话框。
    if(ui->openBt->text() == "打开串口"){
        if(serialPort->open(QIODevice::ReadWrite) == true){
            ui->openBt->setText("关闭串口");
            // 让端口号下拉框不可选,避免误操作(选择功能不可用,控件背景为灰色)
            ui->serailCb->setEnabled(false);
        }else{
            QMessageBox::critical(this, "错误提示", "串口打开失败!!!\r\n该串口可能被占用\r\n请选择正确的串口");
        }
    }else{
        serialPort->close();
        ui->openBt->setText("打开串口");
        // 端口号下拉框恢复可选,避免误操作
        ui->serailCb->setEnabled(true);
    }

}

//检测通讯端口槽函数
void Widget::on_btnSerialCheck_clicked()
{
    ui->serailCb->clear();
    //通过QSerialPortInfo查找可用串口
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    {
        ui->serailCb->addItem(info.portName());
    }
}

void Widget::DateRead()  //接收数据
{
    QByteArray recvData=serialPort->readAll();

    //解析 JSON格式
    QString receive =QString::fromLocal8Bit(recvData.constData());
    QJsonDocument doc=QJsonDocument::fromJson(receive.toUtf8());
    QJsonObject obj=doc.object();

    QJsonValue Current =obj.value("Cur");
    QJsonValue Voltage =obj.value("Vol");

    ui->current_Num->display(Current.toInt());
    ui->voltage_Num->display(Voltage.toInt());
}


Widget::~Widget()
{
    delete ui;
}

验证:
(方法:通过两个USB转串口模块TX和RX对接,其中一个端口通过串口助手发送JSON字符,注意波特率需相同)
QT Creator写一个简单的电压电流显示器

LCD Number还可以更改颜色样式:
QT Creator写一个简单的电压电流显示器
通过styleSheet属性即可更改:
color是字体颜色,background-color是背景色
QT Creator写一个简单的电压电流显示器文章来源地址https://www.toymoban.com/news/detail-514880.html

到了这里,关于QT Creator写一个简单的电压电流显示器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 黑苹果简单的手动开启显示器HiDPI教程

    原文来源于黑果魏叔官网。转载请保留出处。 先说个大概逻辑,就是让系统识别显示器,不管是one-key-hidpi还是hacintools,目的都一样,跟vendorID和productID有关系,我这个无非就是手动而已,可以理解成一键hidpi的手动基础版。 1.打开finder,打开系统文件夹。 2.打开资源库文件夹

    2024年02月12日
    浏览(41)
  • 两台主机共用一个戴尔显示器之快速切换主机

    直接安装戴尔的显示器管理软件,下载安装链接 设置完成之后就可以在同一个显示器上快速切换输入源

    2024年02月11日
    浏览(53)
  • AOC显示器出问题了?别担心,简单重置一下就OK了

    你的AOC显示器有问题吗?它是被卡在特定的屏幕上还是根本不显示任何图像?如果你的显示器出现任何问题,只需简单重置即可解决问题。 重置AOC显示器可以帮助解决一系列问题,例如颜色或显示设置问题、输入源检测问题以及其他与软件相关的问题。在本分步指南中,我们

    2024年02月05日
    浏览(36)
  • qt界面最大化-实现在软件所在的显示器最大化和还原窗口大小

    用qt开发一个图片查看软件,通过重写qlabel实现自定义窗口title,这个title当电脑使用多个显示器的时候,我想实现: 当软件界面的大部分在显示器1的时候,点击最大化或还原按钮时软件就在显示器1最大化或还原,如下图:   当软件界面的大部分在显示器2的时候,点击最大

    2024年02月11日
    浏览(44)
  • 初学51单片机(STC89C52)一个倒计时显示器和大家分享

      想要实现倒计时显示器,首先得确定从哪个时间开始倒计时,这就需要写出一个计数的程序来,通过按键来控制需要的数,从而开始倒计时。我的开发板上用的Key2,Key3,Key4,Key5这四个键,分别对应着加1,减1,乘2,开始计时四个功能。   通过加一,减一,乘2三个操作,

    2024年02月10日
    浏览(59)
  • ManjaroLinux扩展显示器,连接显示器。

    如何设置多显示器的显示 在这里可以使用xrandr来进行设置。 1.插入显示器的接口 这时,我们把刚买的显示器的接口接到显示器上面,确保显示器和笔记本直接的连接没有问题。 2.查看显示器是否连接成功 我们输入命令 回车后可以看到如下扩展显示器的设备接口名称以及可显

    2024年02月11日
    浏览(55)
  • 显示器原理(1):CRT显示器

    大家好,这个系列将会从历史、参数角度来详细讲解显示器及跟显示器有关的技术。 首先,我们先列出一个目录,方便大家理解显示器的参数在哪里起效,这里列出的都是常见的,不常见的我们也会讲,这里就不列出了 这张表格在后几期会用到,我会详细讲解色域、刷新率

    2024年02月09日
    浏览(118)
  • 解决 Ubuntu 外接显示器后,显示器不亮

    目录 原因 解决办法 step1: 修改软件源 step2:查看可安装的驱动版本 step3:安装推荐版本的驱动(recommended) step4:查看是否安装成功 step5:重启电脑,发现外接显示器已亮。 没有装显卡驱动。 step1: 修改软件源 打开 应用程序 —— 软件和更新,在 Ubuntu 软件 界面,点下载自的

    2024年02月09日
    浏览(68)
  • 2023年2K显示器推荐 | 有什么好用的2K显示器?

    开玩笑,如果是同价位来说,当然还是选Nano IPS了,画质好延迟低,妥妥的电竞显示器首选。关键你还是主玩LOL平时看电影,对延迟的要求远低于画质吧,所以TN屏就不用考虑了。Nano IPS的色彩表现的确是IPS屏中的佼佼者,毕竟是色域都可以达到95%以上的DCI-P3,可以产生更加鲜

    2024年02月11日
    浏览(56)
  • Mac 连接显示器,外接显示器不出影像

    1. 现象 转换头,连接线已正确连接; 显示器电源等也亮,且是已有视频信号的状态; 查看设置–显示器,里面也显示识别出已连接外接显示器 2. 解决办法 显示器支持的 最高刷新率 与 系统设置的刷新率 不一致的 2.1 打开 设置 – 显示器 2.2 点击底部 显示器设置 2.3 重点在这

    2024年02月11日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包