📄 qtcomassist.cpp
字号:
#include "qtcomassist.h"
#include <iostream>
using namespace std;
#define INIT_CBB(_ctl,_lst) \
for (int i=0;i<_lst.size();i++) \
{ \
_ctl->addItem(_lst.at(i).first); \
}\
QtComAssist::QtComAssist(QWidget *parent, Qt::WFlags flags)
: QDialog(parent, flags)
{
ui.setupUi(this);
#ifdef WIN32
lst_Device.append(DevicePair("COM1","COM1"));
lst_Device.append(DevicePair("COM2","COM2"));
lst_Device.append(DevicePair("COM3","COM3"));
lst_Device.append(DevicePair("COM4","COM4"));
lst_Device.append(DevicePair("COM5","COM5"));
lst_Device.append(DevicePair("COM6","COM6"));
INIT_CBB(ui.cbbDevice,lst_Device);
#endif
lst_baudrate.append(BaudRatePair("9600",BAUD9600));
lst_baudrate.append(BaudRatePair("19200",BAUD19200));
lst_baudrate.append(BaudRatePair("115200",BAUD115200));
INIT_CBB(ui.cbbBaudrate,lst_baudrate);
lst_parity.append(ParityPair(tr("none"),PAR_NONE));
lst_parity.append(ParityPair(tr("odd"),PAR_ODD));
lst_parity.append(ParityPair(tr("even"),PAR_EVEN));
INIT_CBB(ui.cbbParity,lst_parity);
lst_databits.append(DataBitsPair("8",DATA_8));
lst_databits.append(DataBitsPair("7",DATA_7));
lst_databits.append(DataBitsPair("6",DATA_6));
lst_databits.append(DataBitsPair("5",DATA_5));
INIT_CBB(ui.cbbDatabits,lst_databits);
lst_stopbits.append(StopBitsPair("1",STOP_1));
lst_stopbits.append(StopBitsPair("2",STOP_2));
INIT_CBB(ui.cbbStop,lst_stopbits);
connect(&m_SerialPort,
SIGNAL(bytesWritten(qint64)),
this,
SLOT(sl_Send_finish()));
m_progress= new QProgressDialog(
tr("Sending data..."), tr("Abort"), 0, 0, this
);
connect(m_progress,
SIGNAL(canceled()),
this,
SLOT(sl_Send_abort()));
connect(&timer,SIGNAL(timeout()),this,SLOT(onTimer()));
ui.chbRecDisplay->setChecked(true);
connect(&m_SerialPort,
SIGNAL(readyRead()),
this,
SLOT(sl_serial_data_received()));
setDeviceOpen(false);
}
QtComAssist::~QtComAssist()
{
delete m_progress;
}
void QtComAssist::setDeviceOpen(bool open)
{
if (open)
{
m_DeviceOpened = true;
ui.btnDeviceOC->setText(tr("&Close"));
ui.btnSend->setDisabled(false);
}
else
{
m_DeviceOpened = false;
ui.btnDeviceOC->setText(tr("&Open"));
ui.btnSend->setDisabled(true);
}
}
void QtComAssist::on_btnDeviceOC_clicked()
{
if (m_DeviceOpened==false)
{
m_SerialPort.setPortName(ui.cbbDevice->currentText());
m_SerialPort.setQueryMode(QextSerialPort::EventDriven);
m_SerialPort.setBaudRate(
lst_baudrate.at(ui.cbbBaudrate->currentIndex()).second
);
m_SerialPort.setFlowControl(FLOW_OFF);
m_SerialPort.setParity(
lst_parity.at(ui.cbbParity->currentIndex()).second
);
m_SerialPort.setDataBits(
lst_databits.at(ui.cbbDatabits->currentIndex()).second
);
m_SerialPort.setStopBits(
lst_stopbits.at(ui.cbbStop->currentIndex()).second
);
m_SerialPort.open(QIODevice::ReadWrite);
if (!(m_SerialPort.lineStatus() & LS_DSR)) {
dispError(tr("error: device is not turned on"));
}
else
{
setDeviceOpen(true);
}
}
else
{
m_SerialPort.close();
setDeviceOpen(false);
}
}
void QtComAssist::dispError(const QString & strMessage)
{
cerr<<"ERROR: "<<qPrintable(strMessage)<<endl;
QMessageBox::critical(this,"ERROR",strMessage);
}
void QtComAssist::on_btnSend_clicked()
{
int nDelay=ui.spbSendDelay->text().toInt();
if (nDelay==0)
{
QString strData = ui.edtSend->toPlainText();
m_SerialPort.write(qPrintable(strData),strData.size());
m_arr_data_send_size = strData.size();
}
else
{
m_arr_data_send = ui.edtSend->toPlainText().toLocal8Bit();
m_arr_data_send_size = m_arr_data_send.size();
m_nCurrentPos = 0;
m_progress->setValue(0);
m_progress->setMaximum(m_arr_data_send_size);
m_progress->setWindowModality(Qt::WindowModal);
m_progress->setAutoClose(true);
m_progress->show();
timer.setInterval(nDelay);
timer.start();
}
m_IsSending = true;
ui.btnSend->setDisabled(true);
}
void QtComAssist::onTimer()
{
char ch = m_arr_data_send.at(m_nCurrentPos);
m_SerialPort.write(&ch,1);
}
void QtComAssist::sl_Send_finish()
{
if (timer.isActive())
{
m_nCurrentPos ++;
m_progress->setValue(m_nCurrentPos);
if (m_nCurrentPos == m_arr_data_send_size)
{
timer.stop();
}
else
{
return;
}
}
m_IsSending = false;
ui.btnSend->setDisabled(false);
}
void QtComAssist::sl_Send_abort()
{
timer.stop();
sl_Send_finish();
}
void QtComAssist::sl_serial_data_received()
{
int bytesRead;
do
{
bytesRead=m_SerialPort.read(data, NBUFFER);
if (bytesRead == NBUFFER)
{
m_data_received = QByteArray::fromRawData(data,NBUFFER);
}
else
{
m_data_received = QByteArray::fromRawData(data,bytesRead);
}
cout<<m_data_received.size();
if (ui.chbRecHex->isChecked())
{
for (int i=0;i<m_data_received.size();i++)
{
m_data_hex.sprintf(" %2X",m_data_received.at(i));
ui.edtReceive->insertPlainText(m_data_hex);
}
}
else
{
ui.edtReceive->insertPlainText(m_data_received);
}
} while(bytesRead == NBUFFER);
}
void QtComAssist::on_btnLoad_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("open"),
QDir::currentPath(),
tr("All Files (*);;Text Files (*.txt)")
);
if (!fileName.isEmpty())
{
QFile ifile(fileName);
if (ifile.open(QFile::ReadOnly))
{
QTextStream in(&ifile);
QString strText = in.readAll();
ui.edtSend->setText(strText);
ifile.close();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -