- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- unsigned char i =0; //串口打开标志重绘图像变量
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- setWindowTitle("串口调试助手V1.0");
- Serial_Port_Init(); //串口初始化
- // QwtPlot_Init(); //QwtPlot初始化
- //InitTimer0(); //定时器初始化
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- // 串口初始化函数
- void MainWindow::Serial_Port_Init()
- {
- connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead())); //连接槽
- //获取计算机上所有串口并添加到comboBox中
- QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
- if(infos.isEmpty())
- {
- ui->comboBox->addItem("无串口");
- return;
- }
- foreach (QSerialPortInfo info, infos)
- {
- ui->comboBox->addItem(info.portName());
- qDebug() << info.portName();
- }
- // 为波特率下拉框添加数据
- QStringList baund_strList;
- baund_strList<<"300"<<"1200"<<"2400"<<"4800"<<"9600"<<"19200"<<"38400"<<"56000"<<"57600"<<"115200"<<"128000";
- ui->ComBox_BaudRate->addItems(baund_strList);
- ui->ComBox_BaudRate->setCurrentText("9600");
- // 为数据位下拉框添加数据
- QStringList Data_strList;
- Data_strList<<"5"<<"6"<<"7"<<"8";
- ui->ComBox_DataBits->addItems(Data_strList);
- ui->ComBox_DataBits->setCurrentText("8");
- // 为校验位下拉框添加数据
- QStringList Check_strList;
- Check_strList<<"None"<<"Odd"<<"Even"<<"Mark"<<"Space";
- ui->ComBox_CheckBits->addItems(Check_strList);
- ui->ComBox_CheckBits->setCurrentText("None");
- // 为停止位下拉框添加数据
- QStringList Stop_strList;
- Stop_strList<<"1"<<"2";
- ui->ComBox_StopBits->addItems(Stop_strList);
- ui->ComBox_StopBits->setCurrentText("1");
- // 控件颜色初始化
- ui->textBrowser->setStyleSheet("color:white;background:black;");
- ui->textEdit->setStyleSheet("color:white;background:black;");
- //第一个属性是字体(微软雅黑),第二个是大小,第三个是加粗(权重是75)
- //常见权重
- //QFont::Light - 25 高亮
- //QFont::Normal - 50 正常
- //QFont::DemiBold - 63 半粗体
- //QFont::Bold - 75 粗体
- //QFont::Black - 87 黑体
- QFont font1("Microsoft YaHei",11,50);
- ui->label_port->setFont(font1);
- ui->label_baund->setFont(font1);
- ui->label_data->setFont(font1);
- ui->label_check->setFont(font1);
- ui->label_stop->setFont(font1);
- QFont font2("Microsoft YaHei",10,50);
- ui->comboBox->setFont(font2);
- ui->ComBox_BaudRate->setFont(font2);
- ui->ComBox_DataBits->setFont(font2);
- ui->ComBox_CheckBits->setFont(font2);
- ui->ComBox_StopBits->setFont(font2);
- ui->open_serial_Button->setFont(font2);
- ui->Clear_RC_Button->setFont(font2);
- ui->Clear_Send_Button->setFont(font2);
- ui->Send_Button->setFont(font2);
- }
- // 串口打开按钮处理函数
- void MainWindow::on_open_serial_Button_clicked()
- {
- if(ui->comboBox->isEnabled()) // 串口端口下拉框已使能
- {
- serial.setPortName(ui->comboBox->currentText()); //设置COM口
- serial.setBaudRate(ui->ComBox_BaudRate->currentText().toInt()); //设置波特率
- //设置数据位
- switch(ui->ComBox_DataBits->currentText().toInt())
- {
- case 5: serial.setDataBits(QSerialPort::Data5); break;
- case 6: serial.setDataBits(QSerialPort::Data6); break;
- case 7: serial.setDataBits(QSerialPort::Data7); break;
- case 8: serial.setDataBits(QSerialPort::Data8); break;
- default : break;
- }
- //设置校验位
- if(ui->ComBox_CheckBits->currentText() == "None")
- {
- serial.setParity(QSerialPort::NoParity);
- }
- else if(ui->ComBox_CheckBits->currentText() == "Odd")
- {
- serial.setParity(QSerialPort::OddParity);
- }
- else if(ui->ComBox_CheckBits->currentText() == "Even")
- {
- serial.setParity(QSerialPort::EvenParity);
- }
- else if(ui->ComBox_CheckBits->currentText() == "Mark")
- {
- serial.setParity(QSerialPort::MarkParity);
- }
- else if(ui->ComBox_CheckBits->currentText() == "Space")
- {
- serial.setParity(QSerialPort::SpaceParity);
- }
- //设置停止位
- if(ui->ComBox_StopBits->currentText() == "1")
- {
- serial.setStopBits(QSerialPort::OneStop);
- }
- else if(ui->ComBox_StopBits->currentText() == "2")
- {
- serial.setStopBits(QSerialPort::TwoStop);
- }
- //设置硬件流控制:无控制
- serial.setFlowControl(QSerialPort::NoFlowControl);
- serial.close(); //先关串口,再打开,可以保证串口不被其它函数占用。
- if(serial.open(QIODevice::ReadWrite)) //以读写的方式打开串口
- {
- ui->open_serial_Button->setText("关闭串口"); //按下打开串口后,显示为关闭串口
- ui->comboBox->setDisabled(true); //端口选择下拉框被禁止
- ui->ComBox_BaudRate->setDisabled(true); //波特率选择下拉框被禁止
- ui->ComBox_DataBits->setDisabled(true); //数据位选择下拉框被禁止
- ui->ComBox_CheckBits->setDisabled(true); //校验位选择下拉框被禁止
- ui->ComBox_StopBits->setDisabled(true); //停止位选择下拉框被禁止
- connect(&serial,SIGNAL(readyRead()),this,SLOT(Serial_Read())); //把串口的readyRead()信号绑定到serialRead()这个槽函数上
- i=1; //重绘串口打开标志图像
- update();
- }
- else ///串口打开失败
- {
- qDebug("串口已经被占用");
- QMessageBox::information(NULL, "错误", "串口已经被占用", QMessageBox::Yes | QMessageBox::No);
- }
- }
- else // 串口端口下拉框被禁用
- {
- ui->open_serial_Button->setText("打开串口"); //按下“关闭串口”后,按键显示为“打开串口”
- ui->comboBox->setEnabled(true); //按下“关闭串口”后,COM口可被修改
- ui->ComBox_BaudRate->setEnabled(true); //波特率选择下拉框可被修改
- ui->ComBox_DataBits->setEnabled(true); //数据位选择下拉框可被修改
- ui->ComBox_CheckBits->setEnabled(true); //校验位选择下拉框可被修改
- ui->ComBox_StopBits->setEnabled(true); //停止位选择下拉框可被修改
- serial.close(); //关串口
- i = 0; //重绘串口打开标志图像
- update();
- }
- }
- // 串口读取数据函数
- void MainWindow:: Serial_Read()
- {
- QByteArray buf;
- buf = serial.readAll();
- if(!buf.isEmpty())//如果读到的数据不为空
- {
- ui->textBrowser->insertPlainText(buf);
- }
- buf.clear();
- }
- // 串口发送数据函数
- void MainWindow::on_Send_Button_clicked()
- {
- serial.write(ui->textEdit->toPlainText().toLatin1()); //以ASC码形式发送
- serial.write("\r\n");
- }
- void MainWindow::paintEvent(QPaintEvent *)
- {
- QPainter painter(this);
- if(i ==0)
- {
- painter.setPen(QPen(Qt::gray,4));//设置画笔形式
- painter.drawEllipse(25,206,20,20);//画圆
- }
- if(i==1)
- {
- painter.setBrush(QBrush(Qt::red));
- painter.drawEllipse(25,206,20,20);//画圆
- }
- }
- //// QwtPlot初始化函数
- //// 初始化 标题title
- //// 初始化 yLeft yRight xBottom xTop 及其titile
- //void MainWindow::QwtPlot_Init()
- //{
- //// QwtText t;
- //// t.setColor(QColor(255,0,0));
- //// QBrush brush(QColor(0,0,255));
- //// ui->qwtPlot->setTitle("温度曲线函数图像");
- // QwtText t;
- // t.setText("温度曲线函数图像"); //设置标题名
- //// QFont font;//设置字体
- //// font.setBold(true); //设置粗体
- //// t.setFont(font);
- // t.setColor(QColor(255,0,0)); //设置颜色
- //// //设置标题背景色
- //// QBrush brush(QColor(255,255,255));
- //// t.setBackgroundBrush(brush);
- // ui->qwtPlot->setTitle(t);
- //// ui->qwtPlot->setAxisScale(QwtPlot::yLeft,0,100,10);
- //// ui->qwtPlot->setAxisScale(QwtPlot::xBottom,0,100,10);
- //// ui->qwtPlot->setAxisTitle(QwtPlot::yLeft,"温度C");
- //// ui->qwtPlot->setAxisTitle(QwtPlot::xBottom,"时间t/s");
- // //ui->qwtPlot->setAxisScale(QwtPlot::yRight,0,100,10);
- // //ui->qwtPlot->setAxisScale(QwtPlot::xTop,0,100,10);
- // //ui->qwtPlot->setAxisTitle(QwtPlot::xTop,QObject::trUtf8("Top"));
- // //ui->qwtPlot->setAxisTitle(QwtPlot::yRight,QObject::trUtf8("Right"));
- // //QwtPlot 绘制曲线图像(静态)
- // QwtPlotCurve *curve;
- // double time[]={1,2,3,4,5,6,7,8,9,10};
- // double val[10]={0,0,1.5,2.6,3.8,5.7,5.9,4.2,3.5,0};
- // curve = new QwtPlotCurve("Acc_X");
- // curve->setSamples(time,val,10);
- // curve->attach(ui->qwtPlot);
- // // QwtPlot 绘制曲线图像(动态)
- //// //数据x,y值保存
- //// QVector<QPointF> vector;
- //// for(int i =0;i<100;i++)
- //// {
- //// QPointF point;
- //// point.setX(i);
- //// int y = 20*sin(i*M_PI/10) + 50;
- //// point.setY(y);
- //// vector.append(point);
- //// }
- //// //构造曲线数据
- //// QwtPointSeriesData* series = new QwtPointSeriesData(vector);
- //// //create plot item
- //// QwtPlotCurve* curve1 = new QwtPlotCurve("Curve 1");
- //// curve1->setData(series); //设置数据
- //// curve1->attach(ui->qwtPlot); //把曲线附加到qwtPlot上
- //// ui->qwtPlot->replot();
- //// ui->qwtPlot->show();
- //}
- //void MainWindow::on_qwtPlot_legendDataChanged(const QVariant &itemInfo, const QList<QwtLegendData> &data)
- //{
- //}
- //// 定时器初始化函数
- //void MainWindow:: InitTimer0()
- //{
- // timer0->start(2000);//启动或重启定时器, 并设置定时器时间:毫秒
- // connect(timer0, SIGNAL(timeout()), this, SLOT(Timer0TimeOut()));
- //}
- //// 定时器溢出处理函数
- //void MainWindow::Timer0TimeOut()
- //{
- //}
- // 清除接收数据单选按钮处理函数
- void MainWindow::on_Clear_RC_Button_clicked()
- {
- ui->textBrowser->clear();
- }
- void MainWindow::on_Clear_Send_Button_clicked()
- {
- ui->textEdit->clear();
- }