#include "serialcj.h"
#include "ui_serialcj.h"
SerialCj::SerialCj(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::SerialCj)
{
ui->setupUi(this);
//查找可用的串口
foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
//设置波特率下拉菜单默认显示第三项
ui->BaudBox->setCurrentIndex(2);
//ui->sendButton->setIcon(QIcon("open.ico"));
//关闭发送按钮的使能
ui->sendButton->setEnabled(false);
qDebug() << tr("界面设定成功!");
}
SerialCj::~SerialCj()
{
delete ui;
}
//发送数据
void SerialCj::on_sendButton_clicked()
{
serial->write(ui->textEditSend->toPlainText().toLatin1());
}
//读取接收到的数据
void SerialCj::Read_Data()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEditRec->toPlainText();
str+=tr(buf);
ui->textEditRec->clear();
ui->textEditRec->append(str);
}
buf.clear();
}
void SerialCj::on_openButton_clicked()
{
if(ui->openButton->text()==tr("打开串口"))
{
serial = new QSerialPort;
//设置串口名
serial->setPortName(ui->PortBox->currentText());
//打开串口
serial->open(QIODevice::ReadWrite);
//设置波特率
serial->setBaudRate(ui->BaudBox->currentText().toInt());
//设置数据位数
switch(ui->BitNumBox->currentIndex())
{
case 8: serial->setDataBits(QSerialPort::Data8); break;
default: break;
}
//设置奇偶校验
switch(ui->ParityBox->currentIndex())
{
case 0: serial->setParity(QSerialPort::NoParity); break;
default: break;
}
//设置停止位
switch(ui->StopBox->currentIndex())
{
case 1: serial->setStopBits(QSerialPort::OneStop); break;
case 2: serial->setStopBits(QSerialPort::TwoStop); break;
default: break;
}
//设置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);
//关闭设置菜单使能
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitNumBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
ui->openButton->setText(tr("关闭串口"));
ui->sendButton->setEnabled(true);
//连接信号槽
QObject::connect(serial, &QSerialPort::readyRead, this, &SerialCj::Read_Data);
}
else
{
//关闭串口
serial->clear();
serial->close();
serial->deleteLater();
//恢复设置使能
ui->PortBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->BitNumBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
ui->openButton->setText(tr("打开串口"));
ui->sendButton->setEnabled(false);
}
}
//清空接受数据
void SerialCj::on_pushButton_clicked()
{
ui->textEditRec->clear();
}
//保存文件
void SerialCj::on_saveButton_clicked()
{
// file.write(e.toUtf8());
// file.close();
QString curPath=QDir::currentPath();//获取系统当前目录
QString dlgTitle="另存为一个文件"; //对话框标题
QString filter="h文件(*.h);;c++文件(*.cpp);;文本文件(*.txt);;所有文件(*.*)"; //文件过滤器
QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath,filter);
if (aFileName.isEmpty())
return;
QFile aFile(aFileName);
//aFile.setFileName(aFileName);
if (!aFile.open(QIODevice::WriteOnly | QIODevice::Text))
return ;
QString str=ui->textEditRec->toPlainText();//整个内容作为字符串
QByteArray strBytes=str.toUtf8();//转换为字节数组
//QByteArray strBytes=str.toLocal8Bit();
aFile.write(strBytes,strBytes.length()); //写入文件
aFile.close();
return ;
}
//添加登录界面头文件
//注销进入到登录界面
void SerialCj::on_pushButton_2_clicked()
{
// login *win = new login;//创建登录界面
// win->show();//显示登录界面
// delete this;//把主界面删除
}
//注意添加设置界面头文件
//在主界面进入到设置界面
void SerialCj::on_pushButton_3_clicked()
{
// Setwindow *win = new Setwindow;
// win->show();
// this->close();//这里不能用delete,因为this是main函数中创建的栈空间系统自动释放
}