1.添加QCustomPlot模块及使用步骤
首先,在官网下载QCustomPlot的相关文件,下载QCustomPlot,选择qcustomplot.h 和 qcustomplot.cpp 文件,将其添加到项目中。
在ui文件中,将常规的 QWidget 放在面板上,右键单击它并点击“提升为…”,在显示的对话中,在提升的类的名称中输入"QCustomPlot",最后点击"添加",完成设置。
2.具体代码
基于MODBUS通讯协议的8路温度采集、显示、存储上位机软件,主要包括Qcustomplot、Qfile、QLCDNumber、QTableWidget以及QCheckBox的使用,可以在不同的widget上实时绘制8路温度曲线、进行数码管及表格形式的动态显示、在指定文件夹创建TXT文本进行实时数据存储、显示操作记录和时间。
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget),
_lastPointKey(0)
{
ui->setupUi(this);
setFixedSize( this->width(),this->height()); //窗口定大小
setWindowTitle(tr("TemperatureDisplay"));
modbusDevice = new QModbusTcpClient(this);
windows_init();
}
Widget::~Widget()
{
delete ui;
}
// 界面初始化
void Widget::windows_init()
{
// 控件初始化
ui->close_tcp->setEnabled(false);
ui->start->setEnabled(false);
ui->pause->setEnabled(false);
// lcd 初始化
ui->lcdNumber->setDigitCount(4); //显示位数
ui->lcdNumber->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_2->setDigitCount(4); //显示位数
ui->lcdNumber_2->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_2->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_3->setDigitCount(4); //显示位数
ui->lcdNumber_3->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_3->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_4->setDigitCount(4); //显示位数
ui->lcdNumber_4->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_4->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_5->setDigitCount(4); //显示位数
ui->lcdNumber_5->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_5->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_6->setDigitCount(4); //显示位数
ui->lcdNumber_6->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_6->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_7->setDigitCount(4); //显示位数
ui->lcdNumber_7->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_7->setSegmentStyle(QLCDNumber::Flat); //显示方式
ui->lcdNumber_8->setDigitCount(4); //显示位数
ui->lcdNumber_8->setMode(QLCDNumber::Dec); //十进制
ui->lcdNumber_8->setSegmentStyle(QLCDNumber::Flat); //显示方式
// 表格初始化
ui->tableWidget->setColumnCount(2);//设置列数
ui->tableWidget->setRowCount(8);//设置行数
ui->tableWidget->setAlternatingRowColors(true); //设置隔行变颜色
ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //选中整行
//设置表头
QStringList header;
header<<QString::fromLocal8Bit("Number")<<QString::fromLocal8Bit("Data");
ui->tableWidget->setItem(0,0,new QTableWidgetItem( "Temperature1" ));
ui->tableWidget->setItem(1,0,new QTableWidgetItem( "Temperature2" ));
ui->tableWidget->setItem(2,0,new QTableWidgetItem( "Temperature3" ));
ui->tableWidget->setItem(3,0,new QTableWidgetItem( "Temperature4" ));
ui->tableWidget->setItem(4,0,new QTableWidgetItem( "Temperature5" ));
ui->tableWidget->setItem(5,0,new QTableWidgetItem( "Temperature6" ));
ui->tableWidget->setItem(6,0,new QTableWidgetItem( "Temperature7" ));
ui->tableWidget->setItem(7,0,new QTableWidgetItem( "Temperature8" ));
ui->tableWidget->setHorizontalHeaderLabels(header);
ui->tableWidget->setColumnWidth(0,100);
ui->tableWidget->setColumnWidth(1,80);
ui->tableWidget->show();
//绘图初始化
widget_show();
widget_2_show();
// 实时更新槽函数
_pTimerUpdate = new QTimer(this);
connect(_pTimerUpdate, SIGNAL(timeout()), this, SLOT(customsplot_init()));
}
void Widget::widget_show()
{
// 添加曲线 1
ui->widget->addGraph(); // 增加图层
ui->widget->graph(0)->setPen(QPen(Qt::red));
ui->widget->graph(0)->setAntialiasedFill(false); // 设置图层反锯齿:关闭
// 添加点
ui->widget->addGraph();
ui->widget->graph(1)->setPen(QPen(Qt::blue,3)); // 设置笔的颜色
ui->widget->graph(1)->setLineStyle(QCPGraph::lsNone); // 不画线条
ui->widget->graph(1)->setScatterStyle(QCPScatterStyle::ssDisc); // 设置点的形状
// 添加曲线 2
ui->widget->addGraph(); // 增加图层
ui->widget->graph(2)->setPen(QPen(Qt::red));
ui->widget->graph(2)->setAntialiasedFill(false); // 设置图层反锯齿:关闭
// 添加点
ui->widget->addGraph();
ui->widget->graph(3)->setPen(QPen(Qt::blue,3)); // 设置笔的颜色
ui->widget->graph(3)->setLineStyle(QCPGraph::lsNone); // 不画线条
ui-></