实例介绍
【实例截图】
【文件目录】
TemAndHum_sys
├── Debug
│ ├── Makefile
│ ├── Makefile.Debug
│ ├── Makefile.Release
│ ├── debug
│ │ ├── TemAndHum_sys.exe
│ │ ├── humi.o
│ │ ├── main.o
│ │ ├── moc_humi.cpp
│ │ ├── moc_humi.o
│ │ ├── moc_predefs.h
│ │ ├── moc_temp.cpp
│ │ ├── moc_temp.o
│ │ ├── moc_test.cpp
│ │ ├── moc_test.o
│ │ ├── moc_widget.cpp
│ │ ├── moc_widget.o
│ │ ├── temp.o
│ │ ├── test.o
│ │ └── widget.o
│ └── release
├── TemAndHum_sys.pro
├── TemAndHum_sys.pro.user
├── TemAndHum_sys.pro.user.0252fe0.22
├── TemAndHum_sys.pro.user.3e2c4c7.4.8-pre1
├── humi.cpp
├── humi.h
├── main.cpp
├── temp.cpp
├── temp.h
├── widget.cpp
└── widget.h
3 directories, 29 files
#include "widget.h"
#include <QPushButton>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QRect>
#include <QLabel>
#include <QTextEdit>
#include <QComboBox>
#include <QStringList>
#include <QFont>
#include <QPalette>
#include <QDebug>
#include <QByteArray>
#include "temp.h"
#include "humi.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
tabwidget = new QTabWidget(this);
QWidget *widget1 = new QWidget(this);
QWidget *widget2 = new QWidget(this);
QFont font; //设置字体属性
font.setBold(true);
font.setPixelSize(20);
QPalette palette; //使用调色板设置颜色属性
palette.setColor(QPalette::WindowText,QColor(255,0,0));
QLabel *label_IOset = new QLabel("\n串口设置");
label_IOset->setFont(font);
label_IOset->setPalette(palette);
QLabel *label_TemHumdata = new QLabel("\n温湿度数据");
label_TemHumdata->setFont(font);
label_TemHumdata->setPalette(palette);
QLabel *label_IOnum = new QLabel("1.串口号");
QLabel *label_Baud = new QLabel("2.波特率");
QLabel *label_Checkbit = new QLabel("3.校验位");
QLabel *label_Databit = new QLabel("4.数据位");
QLabel *label_Stopbit = new QLabel("5.停止位");
combo_IOnum = new QComboBox(this); combo_IOnum->setEditable(true); //可设置
combo_Baud = new QComboBox(this); combo_Baud->setEditable(true);
combo_Checkbit = new QComboBox(this);combo_Checkbit->setEditable(true);
combo_Databit = new QComboBox(this); combo_Databit->setEditable(true);
combo_Stopbit = new QComboBox(this); combo_Stopbit->setEditable(true);
QStringList list_IOnum;
list_IOnum << "COM1" << "COM2" << "COM3" << "COM4" << "COM5" << "COM6" << "COM7" << "COM8" << "COM9";
combo_IOnum->addItems(list_IOnum);
QStringList list_Baud;
list_Baud << "115200" << "57600" << "56000" << "38400" << "19200" << "14400" << "9600" << "4800" << "2400";
combo_Baud->addItems(list_Baud);
QStringList list_Checkbit;
list_Checkbit << "NONE" << "ODD" << "EVEN";
combo_Checkbit->addItems(list_Checkbit);
QStringList list_Databit;
list_Databit << "8bit" << "7bit" << "6bit" << "5bit";
combo_Databit->addItems(list_Databit);
QStringList list_Stopbit;
list_Stopbit << "1bit" << "1.5bit" << "2bit";
combo_Stopbit->addItems(list_Stopbit);
QHBoxLayout *layout_IOset = new QHBoxLayout;
QHBoxLayout *layout_IOnum = new QHBoxLayout;
QHBoxLayout *layout_Baud = new QHBoxLayout;
QHBoxLayout *layout_Checkbit = new QHBoxLayout;
QHBoxLayout *layout_Databit = new QHBoxLayout;
QHBoxLayout *layout_Stopbit = new QHBoxLayout;
QHBoxLayout *layout_Button = new QHBoxLayout;
connetButton = new QPushButton("连接");
connetButton->setStyleSheet("QPushButton{ \
font-family:'Microsoft YaHei';font-size:20px;color:#009FCC;\
}");
offButton = new QPushButton("断开");
//offButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#009FCC;}");
offButton->setEnabled(false);
if(offButton->isEnabled() == false){ //判断获得button是否可被点击
offButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#888888;}");
}
//将label和comboBox先用水平布局
layout_IOset->addWidget(label_IOset);
layout_IOnum->addWidget(label_IOnum); layout_IOnum->addWidget(combo_IOnum); layout_IOnum->setSpacing(25);
layout_Baud->addWidget(label_Baud); layout_Baud->addWidget(combo_Baud); //layout_Baud->setSpacing(40);
layout_Checkbit->addWidget(label_Checkbit); layout_Checkbit->addWidget(combo_Checkbit); //layout_Checkbit->setSpacing(30);
layout_Databit->addWidget(label_Databit); layout_Databit->addWidget(combo_Databit); //layout_Databit->setSpacing(30);
layout_Stopbit->addWidget(label_Stopbit); layout_Stopbit->addWidget(combo_Stopbit); //layout_Stopbit->setSpacing(30);
layout_Button->addWidget(connetButton); layout_Button->addWidget(offButton); layout_Button->setSpacing(45);
//再将水平布局用垂直布局排版
QVBoxLayout *vlayout = new QVBoxLayout;
vlayout->addLayout(layout_IOset);
vlayout->addLayout(layout_IOnum);
vlayout->addLayout(layout_Baud);
vlayout->addLayout(layout_Checkbit);
vlayout->addLayout(layout_Databit);
vlayout->addLayout(layout_Stopbit);
vlayout->addLayout(layout_Button);
vlayout->setSpacing(25);
vlayout->addStretch();
//水平布局左边是串口设置,右边是温湿度数据
edit = new QTextEdit(this);
edit->setStyleSheet("QTextEdit{ font-size:20px; }");
QVBoxLayout *vlayout1 = new QVBoxLayout;
vlayout1->addWidget(label_TemHumdata);
vlayout1->addWidget(edit);
QHBoxLayout *layout = new QHBoxLayout;
layout->addLayout(vlayout);
layout->addLayout(vlayout1);
layout->setSpacing(25);
widget1->setLayout(layout);
//1.
tabwidget->addTab(widget1,"串口连接");
//******************************************************************
mytemp = new Temp();
myhumi = new Humi();
QVBoxLayout *seriesLayout = new QVBoxLayout(this);
//seriesLayout->addWidget(mytemp);
seriesLayout->addWidget(myhumi);
widget2->setLayout(seriesLayout);
//2.
tabwidget->addTab(widget2,"温湿度监控曲线");
QHBoxLayout *hboxlayout = new QHBoxLayout(this); //水平布局
hboxlayout->addWidget(tabwidget);
hboxlayout->setMargin(0);
hboxlayout->setSpacing(0);
//hboxlayout->addStretch(); //弹簧分割
this->setLayout(hboxlayout);
this->resize(1366,780);
this->setWindowTitle("简易温湿度监控系统 (by:Hfoon 2020/4/27)");
this->setStyleSheet("background-color:#FFFAF0;"); //样式表,这里使用QColor样式表的色卡不准
QPalette pal;
pal.setBrush(QPalette::Background,QColor(48,54,64));
//this->setPalette(pal);
//信号槽函数
connect(connetButton,SIGNAL(clicked()),this,SLOT(onConnetButtonclicked()));
connect(offButton,SIGNAL(clicked()),this,SLOT(onOffButtonclicked()));
serialport = new QSerialPort(this);
connect(serialport,SIGNAL(readyRead()),this,SLOT(onSerialreadyRead())); //读取缓冲区数据,readyRead()读缓冲区信号
localtime = new QDateTime;
timer = new QTimer;
connect(timer,SIGNAL(timeout()),this,SLOT(onTimerOut()));
}
Widget::~Widget()
{
}
void Widget::setTempvalue(QString value)
{
tempvalue = value;
}
QString Widget::getTempvalue()
{
return tempvalue;
}
void Widget::onConnetButtonclicked()
{
qDebug() << "连接成功!!!!";
choiceport = combo_IOnum->currentText();
qDebug() << "PortName::" << choiceport;
serialport->setPortName(choiceport); //设置串口号
if(serialport->open(QIODevice::ReadWrite)){
offButton->setEnabled(true);
if(offButton->isEnabled() == true){ //判断获得button是否可被点击
offButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#009FCC;}");
connetButton->setEnabled(false);
connetButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#888888;}");
}
edit->append("********************* \n串口连接成功!!! \n串口号为:" choiceport "\n*********************");
timer->start(2000);
myhumi->timeStart();
//设置波特率
serialport->setBaudRate(combo_Baud->currentText().toInt());
serialport->setFlowControl(QSerialPort::NoFlowControl);
qDebug() << "BaudRate::" << combo_Baud->currentText().toInt();
//检验位
QString parity = combo_Checkbit->currentText();
qDebug() << "Parity::" << parity;
if(parity == "NONE"){
serialport->setParity(QSerialPort::NoParity);
}
if(parity == "ODD"){
serialport->setParity(QSerialPort::OddParity);
}
if(parity == "EVEN"){
serialport->setParity(QSerialPort::EvenParity);
}
//数据位
QString databits = combo_Databit->currentText();
qDebug() << "DataBits::" << databits;
if(databits == "8bit"){
serialport->setDataBits(QSerialPort::Data8);
}
if(databits == "7bit"){
serialport->setDataBits(QSerialPort::Data7);
}
if(databits == "6bit"){
serialport->setDataBits(QSerialPort::Data6);
}
if(databits == "5bit"){
serialport->setDataBits(QSerialPort::Data5);
}
//停止位
QString stopbits = combo_Stopbit->currentText();
qDebug() << "StopBits::" << stopbits;
if(stopbits == "1bit"){
serialport->setStopBits(QSerialPort::OneStop);
}
if(stopbits == "1.5bit"){
serialport->setStopBits(QSerialPort::OneAndHalfStop);
}
if(stopbits == "2bit"){
serialport->setStopBits(QSerialPort::TwoStop);
}
}
}
int Widget::onOffButtonclicked( )
{
serialport->clear();
serialport->close();
timer->stop();
mytemp->timeStop(); //同时温湿度的折线定时也要stop()
myhumi->timeStop();
edit->append("***串口关闭!!!");
offButton->setEnabled(false);
offButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#888888;}");
connetButton->setEnabled(true);
connetButton->setStyleSheet("QPushButton{ font-family:'Microsoft YaHei';font-size:20px;color:#009FCC;}");
}
void Widget::onSerialreadyRead()
{
QString gettime = localtime->currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
QString readdata = serialport->readAll();
if(readdata != NULL){
edit->append(gettime);
edit->append(readdata);
qDebug() << "readdata::" << readdata << "\n";
QStringList strlist = readdata.split("\r\n");
QString humi = strlist[0];
//qDebug() << humi.mid(5);
QString temp = strlist[1];
//qDebug() << temp.mid(5,9);
setTempvalue( temp.mid(5,9) );
emit tempSignal( temp.mid(5,9) );
}
readdata.clear();
}
void Widget::onTimerOut()
{
static int counttimer = 0;
counttimer ;
qDebug() << "counttimer::" << counttimer;
if(counttimer > 300){ //每过5分钟textedit清除历史记录
edit->clear();
counttimer = NULL; //重新设置开始时间要在TimerOut()函数中,因为计数 在此!
}
myhumi->setTemp( getTempvalue() ); //当串口连接成功的时候才传温湿度值
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论