diff --git a/mainwindow.cpp b/mainwindow.cpp --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -56,6 +56,25 @@ MainWindow::MainWindow(QWidget *parent) QObject::connect(&numberFormatButtons, SIGNAL(buttonToggled(int, bool)), this, SLOT(onNumberFormatButtonToggled(int, bool))); + // setup parity selection buttons + selectParityMapper.setMapping(ui->rbNoParity, (int) QSerialPort::NoParity); + selectParityMapper.setMapping(ui->rbEvenParity, (int) QSerialPort::EvenParity); + selectParityMapper.setMapping(ui->rbOddParity, (int) QSerialPort::OddParity); + + QObject::connect(ui->rbNoParity, &QPushButton::clicked, + &selectParityMapper, + SELECT<>::OVERLOAD_OF(&QSignalMapper::map)); + QObject::connect(ui->rbEvenParity, &QPushButton::clicked, + &selectParityMapper, + SELECT<>::OVERLOAD_OF(&QSignalMapper::map)); + QObject::connect(ui->rbOddParity, &QPushButton::clicked, + &selectParityMapper, + SELECT<>::OVERLOAD_OF(&QSignalMapper::map)); + + QObject::connect(&selectParityMapper, + SELECT::OVERLOAD_OF(&QSignalMapper::mapped), + this, &MainWindow::selectParity); + // init port signals QObject::connect(&(this->serialPort), SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(onPortError(QSerialPort::SerialPortError))); @@ -202,6 +221,17 @@ void MainWindow::selectBaudRate(QString } } +void MainWindow::selectParity(int parity) +{ + if (serialPort.isOpen()) + { + if(!serialPort.setParity((QSerialPort::Parity) parity)) + { + qDebug() << "Set parity failed: " << serialPort.error(); + } + } +} + void MainWindow::onPortToggled(bool open) { ui->pbOpenPort->setChecked(open); diff --git a/mainwindow.h b/mainwindow.h --- a/mainwindow.h +++ b/mainwindow.h @@ -6,6 +6,7 @@ #include #include #include +#include #include namespace Ui { @@ -49,6 +50,8 @@ private: // note that serialPort should already have enough bytes present template double readSampleAs(); + QSignalMapper selectParityMapper; + private slots: void loadPortList(); void loadBaudRateList(); @@ -56,6 +59,7 @@ private slots: void selectPort(QString portName); void onPortToggled(bool open); void selectBaudRate(QString baudRate); + void selectParity(int parity); // parity must be one of QSerialPort::Parity void onDataReady(); void onPortError(QSerialPort::SerialPortError error);