153 lines
4.7 KiB
C++
153 lines
4.7 KiB
C++
#include "mutilSerialConfigWidget.h"
|
|
#include "ui_mutilSerialConfigWidget.h"
|
|
#include "serialConnection.h"
|
|
#include <QDateTime>
|
|
#include <QMenu>
|
|
#include <QAction>
|
|
#include <QScrollBar>
|
|
#include <QDebug>
|
|
|
|
MutilSerialConfigWidget::MutilSerialConfigWidget(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::MutilSerialConfigWidget)
|
|
{
|
|
ui->setupUi(this);
|
|
on_toolBtnAddLeft_clicked();
|
|
on_toolBtnAddRight_clicked();
|
|
}
|
|
|
|
MutilSerialConfigWidget::~MutilSerialConfigWidget()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void MutilSerialConfigWidget::receiverDataHandle(const QByteArray &data)
|
|
{
|
|
QDateTime current = QDateTime::currentDateTime();
|
|
SerialConnection *conn = qobject_cast<SerialConnection *>(sender());
|
|
bool left=false,right=false;
|
|
for(ConnectionSettingWidget* wdg:wdgLeftMap.keys()){
|
|
if(wdg->getConnection().get()==conn){
|
|
left = true;
|
|
break;
|
|
}
|
|
}
|
|
if(!left){
|
|
for(ConnectionSettingWidget* wdg:wdgRightMap.keys()){
|
|
if(wdg->getConnection().get()==conn){
|
|
right = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(left){
|
|
for(ConnectionSettingWidget* wdg:wdgRightMap.keys()){
|
|
SerialConnection *serial = qobject_cast<SerialConnection *>(wdg->getConnection().get());
|
|
serial->sendData(data);
|
|
}
|
|
}else if(right){
|
|
for(ConnectionSettingWidget* wdg:wdgLeftMap.keys()){
|
|
SerialConnection *serial = qobject_cast<SerialConnection *>(wdg->getConnection().get());
|
|
serial->sendData(data);
|
|
}
|
|
}
|
|
|
|
if(bStop){
|
|
return;
|
|
}
|
|
QString txt;
|
|
if(!bdisplayHex){
|
|
txt = QString::fromLocal8Bit(data);
|
|
}else{
|
|
foreach (const unsigned char byte, data) {
|
|
txt += QString("%1").arg(byte,2,16,QChar('0')).toUpper() + " ";
|
|
}
|
|
}
|
|
|
|
ui->plainTextEdit->appendPlainText(QString("[%1]%2:%3").arg(current.toString("hh:mm:ss.zzz")).arg(conn->getConnectionName()).arg(txt));
|
|
}
|
|
|
|
void MutilSerialConfigWidget::displayHexHandle()
|
|
{
|
|
bdisplayHex = true;
|
|
}
|
|
|
|
void MutilSerialConfigWidget::displayAsciiHandle()
|
|
{
|
|
bdisplayHex = false;
|
|
}
|
|
|
|
void MutilSerialConfigWidget::displayClearHandle()
|
|
{
|
|
ui->plainTextEdit->clear();
|
|
}
|
|
|
|
void MutilSerialConfigWidget::displayStopHandle()
|
|
{
|
|
bStop = !bStop;
|
|
if(!bStop){
|
|
QScrollBar *vScrollBar = ui->plainTextEdit->verticalScrollBar();
|
|
vScrollBar->setValue(vScrollBar->maximum());
|
|
}
|
|
}
|
|
|
|
void MutilSerialConfigWidget::on_toolBtnAddLeft_clicked()
|
|
{
|
|
QString protocol = "SERIAL";;
|
|
|
|
ConnectionSettingWidget *wdg = new ConnectionSettingWidget(protocol);
|
|
int row = ui->gridLayoutSerialLeft->rowCount();
|
|
ui->gridLayoutSerialLeft->addWidget(wdg,row,0);
|
|
wdgLeftMap[wdg] = QPair<int,int>(row,0);
|
|
connect(wdg->getConnection().get(),SIGNAL(recvDataSignal(QByteArray)),this,SLOT(receiverDataHandle(QByteArray)),Qt::QueuedConnection);
|
|
}
|
|
|
|
|
|
void MutilSerialConfigWidget::on_toolBtnAddRight_clicked()
|
|
{
|
|
QString protocol = "SERIAL";;
|
|
ConnectionSettingWidget *wdg = new ConnectionSettingWidget(protocol);
|
|
int row = ui->gridLayoutSerialRight->rowCount();
|
|
ui->gridLayoutSerialRight->addWidget(wdg,row,0);
|
|
wdgRightMap[wdg] = QPair<int,int>(row,0);
|
|
connect(wdg->getConnection().get(),SIGNAL(recvDataSignal(QByteArray)),this,SLOT(receiverDataHandle(QByteArray)),Qt::QueuedConnection);
|
|
}
|
|
|
|
|
|
void MutilSerialConfigWidget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)
|
|
{
|
|
//Q_UNUSED(pos);
|
|
QMenu *menu = new QMenu(this);
|
|
QAction *displayHex = new QAction(tr("HEX显示"),this);
|
|
QAction *displayAscii = new QAction(tr("ASCII显示"),this);
|
|
QAction *displayStop = nullptr;
|
|
QAction *displayClear = new QAction(tr("清空"),this);
|
|
if(bdisplayHex){
|
|
displayHex->setCheckable(true);
|
|
displayHex->setChecked(true);
|
|
}else{
|
|
displayAscii->setCheckable(true);
|
|
displayAscii->setChecked(true);
|
|
}
|
|
if(bStop){
|
|
displayStop = new QAction(tr("继续"),this);
|
|
}else{
|
|
displayStop = new QAction(tr("暂停"),this);
|
|
}
|
|
|
|
menu->addAction(displayHex);
|
|
menu->addAction(displayAscii);
|
|
menu->addAction(displayStop);
|
|
menu->addAction(displayClear);
|
|
|
|
connect(displayHex,SIGNAL(triggered(bool)),this,SLOT(displayHexHandle()));
|
|
connect(displayAscii,SIGNAL(triggered(bool)),this,SLOT(displayAsciiHandle()));
|
|
connect(displayClear,SIGNAL(triggered(bool)),this,SLOT(displayClearHandle()));
|
|
connect(displayStop,SIGNAL(triggered(bool)),this,SLOT(displayStopHandle()));
|
|
|
|
//让菜单移动鼠标位置并显示
|
|
//menu->exec(QCursor::pos());
|
|
menu->exec(ui->plainTextEdit->mapToGlobal(pos));
|
|
}
|
|
|