#include "mutilSerialConfigWidget.h" #include "ui_mutilSerialConfigWidget.h" #include "serialConnection.h" #include #include #include #include #include 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(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(wdg->getConnection().get()); serial->sendData(data); } }else if(right){ for(ConnectionSettingWidget* wdg:wdgLeftMap.keys()){ SerialConnection *serial = qobject_cast(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(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(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)); }