From eb85cebadb546dafe7c87db931164491ad5cca89 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Wed, 9 May 2018 20:43:49 +0200 Subject: Cleanup and modernize the Modbus examples * Replace static_cast with QOverload * Fix some Clang warnings * Mark user-visible strings with tr() * Disable verbose log output * Replace auto-connect with explicit functor-style connect * Initialize members at declaration * Small style cleanup Change-Id: Idcb6c24a8733e7fd659ad4750ce0798a72c84af6 Reviewed-by: Alex Blasche --- examples/serialbus/modbus/adueditor/adueditor.pro | 16 ++++- examples/serialbus/modbus/adueditor/mainwindow.cpp | 43 +++++++------ .../serialbus/modbus/adueditor/modbustcpclient_p.h | 21 +++---- .../serialbus/modbus/adueditor/plaintextedit.h | 6 +- examples/serialbus/modbus/master/main.cpp | 5 +- examples/serialbus/modbus/master/mainwindow.cpp | 72 ++++++++++++---------- examples/serialbus/modbus/master/mainwindow.h | 26 ++++---- examples/serialbus/modbus/master/master.pro | 21 ++++--- examples/serialbus/modbus/master/settingsdialog.h | 2 +- .../serialbus/modbus/master/writeregistermodel.cpp | 6 +- .../serialbus/modbus/master/writeregistermodel.h | 4 +- examples/serialbus/modbus/slave/main.cpp | 5 +- examples/serialbus/modbus/slave/mainwindow.cpp | 45 +++++++------- examples/serialbus/modbus/slave/mainwindow.h | 10 +-- examples/serialbus/modbus/slave/slave.pro | 15 +++-- 15 files changed, 162 insertions(+), 135 deletions(-) (limited to 'examples') diff --git a/examples/serialbus/modbus/adueditor/adueditor.pro b/examples/serialbus/modbus/adueditor/adueditor.pro index facba76..77a6158 100644 --- a/examples/serialbus/modbus/adueditor/adueditor.pro +++ b/examples/serialbus/modbus/adueditor/adueditor.pro @@ -7,9 +7,19 @@ QT += serialbus-private core-private requires(qtConfig(combobox)) requires(qtConfig(modbus-serialport)) -FORMS += interface.ui -SOURCES += main.cpp mainwindow.cpp modbustcpclient.cpp -HEADERS += mainwindow.h plaintextedit.h modbustcpclient.h modbustcpclient_p.h +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + modbustcpclient.cpp + +HEADERS += \ + mainwindow.h \ + modbustcpclient.h \ + modbustcpclient_p.h \ + plaintextedit.h + +FORMS += \ + interface.ui target.path = $$[QT_INSTALL_EXAMPLES]/serialbus/modbus/adueditor INSTALLS += target diff --git a/examples/serialbus/modbus/adueditor/mainwindow.cpp b/examples/serialbus/modbus/adueditor/mainwindow.cpp index 862be6a..995cfc9 100644 --- a/examples/serialbus/modbus/adueditor/mainwindow.cpp +++ b/examples/serialbus/modbus/adueditor/mainwindow.cpp @@ -52,8 +52,8 @@ #include "modbustcpclient.h" #include -#include #include +#include #include #ifndef QT_STATIC @@ -84,7 +84,7 @@ MainWindow::MainWindow(QWidget *parent) for (const QSerialPortInfo &info : ports) serialPortCombo->addItem(info.portName(), false); serialPortCombo->insertSeparator(serialPortCombo->count()); - serialPortCombo->addItem(QStringLiteral("Add port..."), true); + serialPortCombo->addItem(tr("Add port..."), true); serialPortCombo->setInsertPolicy(QComboBox::InsertAtTop); connect(tcpRadio, &QRadioButton::toggled, this, [this](bool toggled) { @@ -119,14 +119,14 @@ void MainWindow::on_sendButton_clicked() return; } - const quint8 address = (isSerial ? addressSpin : ui1Spin)->value(); + const quint8 address = quint8((isSerial ? addressSpin : ui1Spin)->value()); if (isCustom) { qDebug() << "Send: Sending custom PDU."; reply = m_device->sendRawRequest(QModbusRequest(QModbusRequest::FunctionCode( pduData[0]), pduData.mid(1)), address); } else { qDebug() << "Send: Sending PDU with predefined function code."; - quint16 fc = (isSerial ? fcSerialDrop : fcTcpDrop)->currentText().left(4).toShort(0, 16); + quint16 fc = (isSerial ? fcSerialDrop : fcTcpDrop)->currentText().left(4).toUShort(0, 16); reply = m_device->sendRawRequest(QModbusRequest(QModbusRequest::FunctionCode(fc), pduData), address); } @@ -149,24 +149,23 @@ void MainWindow::on_connectButton_clicked() { if (tcpRadio->isChecked()) { auto device = new ModbusTcpClient; - using signature = void (QSpinBox::*)(int); - connect(ti1Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - connect(ti2Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - - connect(pi1Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - connect(pi2Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - - connect(l1Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - connect(l2Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); - - connect(ui1Spin, static_cast(&QSpinBox::valueChanged), device, - &ModbusTcpClient::valueChanged); + connect(ti1Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + connect(ti2Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + + connect(pi1Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + connect(pi2Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + + connect(l1Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + connect(l2Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); + + connect(ui1Spin, QOverload::of(&QSpinBox::valueChanged), + device, &ModbusTcpClient::valueChanged); m_device = device; device->valueChanged(0); // trigger update diff --git a/examples/serialbus/modbus/adueditor/modbustcpclient_p.h b/examples/serialbus/modbus/adueditor/modbustcpclient_p.h index 9d091d8..a563b6f 100644 --- a/examples/serialbus/modbus/adueditor/modbustcpclient_p.h +++ b/examples/serialbus/modbus/adueditor/modbustcpclient_p.h @@ -73,7 +73,7 @@ public: QDataStream output(&buffer, QIODevice::WriteOnly); output << m_tId << m_pId << m_length << m_uId << request; - int writtenBytes = m_socket->write(buffer); + qint64 writtenBytes = m_socket->write(buffer); if (writtenBytes == -1 || writtenBytes < buffer.size()) { Q_Q(ModbusTcpClient); qDebug() << "Cannot write request to socket."; @@ -91,14 +91,13 @@ public: Q_Q(ModbusTcpClient); auto reply = new QModbusReply(type, m_uId, q); - const auto element = QueueElement{ reply, request, unit, m_numberOfRetries, - m_responseTimeoutDuration }; + const auto element = QueueElement{reply, request, unit, m_numberOfRetries, + m_responseTimeoutDuration}; m_transactionStore.insert(m_tId, element); - using TypeId = void (QTimer::*)(int); q->connect(q, &QModbusClient::timeoutChanged, - element.timer.data(), static_cast(&QTimer::setInterval)); - QObject::connect(element.timer.data(), &QTimer::timeout, [this, writeToSocket]() { + element.timer.data(), QOverload::of(&QTimer::setInterval)); + q->connect(element.timer.data(), &QTimer::timeout, [this, writeToSocket]() { if (!m_transactionStore.contains(m_tId)) return; @@ -120,13 +119,13 @@ public: } }); element.timer->start(); - return reply; + return reply; } - quint16 m_tId; - quint16 m_pId; - quint16 m_length; - quint8 m_uId; + quint16 m_tId = 0; + quint16 m_pId = 0; + quint16 m_length = 0; + quint8 m_uId = 0; }; #endif // MODBUSTCPCLIENT_P_H diff --git a/examples/serialbus/modbus/adueditor/plaintextedit.h b/examples/serialbus/modbus/adueditor/plaintextedit.h index 3cbbaaf..cbc590c 100644 --- a/examples/serialbus/modbus/adueditor/plaintextedit.h +++ b/examples/serialbus/modbus/adueditor/plaintextedit.h @@ -81,12 +81,12 @@ public: void contextMenuEvent(QContextMenuEvent *event) { QMenu menu(this); - menu.addAction(QStringLiteral("Clear"), this, &QPlainTextEdit::clear); + menu.addAction(tr("Clear"), this, &QPlainTextEdit::clear); #ifndef QT_NO_CLIPBOARD - menu.addAction(QStringLiteral("Copy"), this, &QPlainTextEdit::copy, QKeySequence::Copy); + menu.addAction(tr("Copy"), this, &QPlainTextEdit::copy, QKeySequence::Copy); #endif menu.addSeparator(); - menu.addAction(QStringLiteral("Select All"), this, &QPlainTextEdit::selectAll, + menu.addAction(tr("Select All"), this, &QPlainTextEdit::selectAll, QKeySequence::SelectAll); menu.exec(event->globalPos()); } diff --git a/examples/serialbus/modbus/master/main.cpp b/examples/serialbus/modbus/master/main.cpp index 4f97a39..19a1d5b 100644 --- a/examples/serialbus/modbus/master/main.cpp +++ b/examples/serialbus/modbus/master/main.cpp @@ -55,9 +55,8 @@ int main(int argc, char *argv[]) { - // TODO uncomment this line before release - // right now we always need it - QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = true")); + // Uncomment the following line to enable logging + // QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = true")); QApplication a(argc, argv); MainWindow w; w.show(); diff --git a/examples/serialbus/modbus/master/mainwindow.cpp b/examples/serialbus/modbus/master/mainwindow.cpp index 6600af8..7427a17 100644 --- a/examples/serialbus/modbus/master/mainwindow.cpp +++ b/examples/serialbus/modbus/master/mainwindow.cpp @@ -67,8 +67,6 @@ enum ModbusConnection { MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) - , lastRequest(nullptr) - , modbusDevice(nullptr) { ui->setupUi(this); @@ -82,8 +80,8 @@ MainWindow::MainWindow(QWidget *parent) ui->writeValueTable->setModel(writeModel); ui->writeValueTable->hideColumn(2); - connect(writeModel, &WriteRegisterModel::updateViewport, ui->writeValueTable->viewport(), - static_cast(&QWidget::update)); + connect(writeModel, &WriteRegisterModel::updateViewport, + ui->writeValueTable->viewport(), QOverload<>::of(&QWidget::update)); ui->writeTable->addItem(tr("Coils"), QModbusDataUnit::Coils); ui->writeTable->addItem(tr("Discrete Inputs"), QModbusDataUnit::DiscreteInputs); @@ -92,11 +90,11 @@ MainWindow::MainWindow(QWidget *parent) #if QT_CONFIG(modbus_serialport) ui->connectType->setCurrentIndex(0); - on_connectType_currentIndexChanged(0); + onConnectTypeChanged(0); #else // lock out the serial port option ui->connectType->setCurrentIndex(1); - on_connectType_currentIndexChanged(1); + onConnectTypeChanged(1); ui->connectType->setEnabled(false); #endif @@ -105,10 +103,10 @@ MainWindow::MainWindow(QWidget *parent) model->setItem(i, new QStandardItem(QStringLiteral("%1").arg(i + 1))); ui->writeSize->setModel(model); ui->writeSize->setCurrentText("10"); - connect(ui->writeSize,&QComboBox::currentTextChanged, writeModel, - &WriteRegisterModel::setNumberOfValues); + connect(ui->writeSize, &QComboBox::currentTextChanged, + writeModel, &WriteRegisterModel::setNumberOfValues); - auto valueChanged = static_cast (&QSpinBox::valueChanged); + auto valueChanged = QOverload::of(&QSpinBox::valueChanged); connect(ui->writeAddress, valueChanged, writeModel, &WriteRegisterModel::setStartAddress); connect(ui->writeAddress, valueChanged, this, [this, model](int i) { int lastPossibleIndex = 0; @@ -142,16 +140,28 @@ void MainWindow::initActions() ui->actionExit->setEnabled(true); ui->actionOptions->setEnabled(true); + connect(ui->connectButton, &QPushButton::clicked, + this, &MainWindow::onConnectButtonClicked); connect(ui->actionConnect, &QAction::triggered, - this, &MainWindow::on_connectButton_clicked); + this, &MainWindow::onConnectButtonClicked); connect(ui->actionDisconnect, &QAction::triggered, - this, &MainWindow::on_connectButton_clicked); + this, &MainWindow::onConnectButtonClicked); + connect(ui->readButton, &QPushButton::clicked, + this, &MainWindow::onReadButtonClicked); + connect(ui->writeButton, &QPushButton::clicked, + this, &MainWindow::onWriteButtonClicked); + connect(ui->readWriteButton, &QPushButton::clicked, + this, &MainWindow::onReadWriteButtonClicked); + connect(ui->connectType, QOverload::of(&QComboBox::currentIndexChanged), + this, &MainWindow::onConnectTypeChanged); + connect(ui->writeTable, QOverload::of(&QComboBox::currentIndexChanged), + this, &MainWindow::onWriteTableChanged); connect(ui->actionExit, &QAction::triggered, this, &QMainWindow::close); connect(ui->actionOptions, &QAction::triggered, m_settingsDialog, &QDialog::show); } -void MainWindow::on_connectType_currentIndexChanged(int index) +void MainWindow::onConnectTypeChanged(int index) { if (modbusDevice) { modbusDevice->disconnectDevice(); @@ -159,7 +169,7 @@ void MainWindow::on_connectType_currentIndexChanged(int index) modbusDevice = nullptr; } - auto type = static_cast (index); + auto type = static_cast(index); if (type == Serial) { #if QT_CONFIG(modbus_serialport) modbusDevice = new QModbusRtuSerialMaster(this); @@ -182,18 +192,18 @@ void MainWindow::on_connectType_currentIndexChanged(int index) statusBar()->showMessage(tr("Could not create Modbus client."), 5000); } else { connect(modbusDevice, &QModbusClient::stateChanged, - this, &MainWindow::onStateChanged); + this, &MainWindow::onModbusStateChanged); } } -void MainWindow::on_connectButton_clicked() +void MainWindow::onConnectButtonClicked() { if (!modbusDevice) return; statusBar()->clearMessage(); if (modbusDevice->state() != QModbusDevice::ConnectedState) { - if (static_cast (ui->connectType->currentIndex()) == Serial) { + if (static_cast(ui->connectType->currentIndex()) == Serial) { modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, ui->portEdit->text()); #if QT_CONFIG(modbus_serialport) @@ -226,7 +236,7 @@ void MainWindow::on_connectButton_clicked() } } -void MainWindow::onStateChanged(int state) +void MainWindow::onModbusStateChanged(int state) { bool connected = (state != QModbusDevice::UnconnectedState); ui->actionConnect->setEnabled(!connected); @@ -238,7 +248,7 @@ void MainWindow::onStateChanged(int state) ui->connectButton->setText(tr("Disconnect")); } -void MainWindow::on_readButton_clicked() +void MainWindow::onReadButtonClicked() { if (!modbusDevice) return; @@ -247,7 +257,7 @@ void MainWindow::on_readButton_clicked() if (auto *reply = modbusDevice->sendReadRequest(readRequest(), ui->serverEdit->value())) { if (!reply->isFinished()) - connect(reply, &QModbusReply::finished, this, &MainWindow::readReady); + connect(reply, &QModbusReply::finished, this, &MainWindow::onReadReady); else delete reply; // broadcast replies return immediately } else { @@ -255,7 +265,7 @@ void MainWindow::on_readButton_clicked() } } -void MainWindow::readReady() +void MainWindow::onReadReady() { auto reply = qobject_cast(sender()); if (!reply) @@ -263,7 +273,7 @@ void MainWindow::readReady() if (reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); - for (uint i = 0; i < unit.valueCount(); i++) { + for (int i = 0, total = int(unit.valueCount()); i < total; ++i) { const QString entry = tr("Address: %1, Value: %2").arg(unit.startAddress() + i) .arg(QString::number(unit.value(i), unit.registerType() <= QModbusDataUnit::Coils ? 10 : 16)); @@ -282,7 +292,7 @@ void MainWindow::readReady() reply->deleteLater(); } -void MainWindow::on_writeButton_clicked() +void MainWindow::onWriteButtonClicked() { if (!modbusDevice) return; @@ -290,7 +300,7 @@ void MainWindow::on_writeButton_clicked() QModbusDataUnit writeUnit = writeRequest(); QModbusDataUnit::RegisterType table = writeUnit.registerType(); - for (uint i = 0; i < writeUnit.valueCount(); i++) { + for (int i = 0, total = int(writeUnit.valueCount()); i < total; ++i) { if (table == QModbusDataUnit::Coils) writeUnit.setValue(i, writeModel->m_coils[i + writeUnit.startAddress()]); else @@ -319,7 +329,7 @@ void MainWindow::on_writeButton_clicked() } } -void MainWindow::on_readWriteButton_clicked() +void MainWindow::onReadWriteButtonClicked() { if (!modbusDevice) return; @@ -328,7 +338,7 @@ void MainWindow::on_readWriteButton_clicked() QModbusDataUnit writeUnit = writeRequest(); QModbusDataUnit::RegisterType table = writeUnit.registerType(); - for (uint i = 0; i < writeUnit.valueCount(); i++) { + for (int i = 0, total = int(writeUnit.valueCount()); i < total; ++i) { if (table == QModbusDataUnit::Coils) writeUnit.setValue(i, writeModel->m_coils[i + writeUnit.startAddress()]); else @@ -338,7 +348,7 @@ void MainWindow::on_readWriteButton_clicked() if (auto *reply = modbusDevice->sendReadWriteRequest(readRequest(), writeUnit, ui->serverEdit->value())) { if (!reply->isFinished()) - connect(reply, &QModbusReply::finished, this, &MainWindow::readReady); + connect(reply, &QModbusReply::finished, this, &MainWindow::onReadReady); else delete reply; // broadcast replies return immediately } else { @@ -346,7 +356,7 @@ void MainWindow::on_readWriteButton_clicked() } } -void MainWindow::on_writeTable_currentIndexChanged(int index) +void MainWindow::onWriteTableChanged(int index) { const bool coilsOrHolding = index == 0 || index == 3; if (coilsOrHolding) { @@ -363,25 +373,25 @@ void MainWindow::on_writeTable_currentIndexChanged(int index) QModbusDataUnit MainWindow::readRequest() const { const auto table = - static_cast (ui->writeTable->currentData().toInt()); + static_cast(ui->writeTable->currentData().toInt()); int startAddress = ui->readAddress->value(); Q_ASSERT(startAddress >= 0 && startAddress < 10); // do not go beyond 10 entries - int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 10 - startAddress); + quint16 numberOfEntries = qMin(ui->readSize->currentText().toUShort(), quint16(10 - startAddress)); return QModbusDataUnit(table, startAddress, numberOfEntries); } QModbusDataUnit MainWindow::writeRequest() const { const auto table = - static_cast (ui->writeTable->currentData().toInt()); + static_cast(ui->writeTable->currentData().toInt()); int startAddress = ui->writeAddress->value(); Q_ASSERT(startAddress >= 0 && startAddress < 10); // do not go beyond 10 entries - int numberOfEntries = qMin(ui->writeSize->currentText().toInt(), 10 - startAddress); + quint16 numberOfEntries = qMin(ui->writeSize->currentText().toUShort(), quint16(10 - startAddress)); return QModbusDataUnit(table, startAddress, numberOfEntries); } diff --git a/examples/serialbus/modbus/master/mainwindow.h b/examples/serialbus/modbus/master/mainwindow.h index d4d5036..186d004 100644 --- a/examples/serialbus/modbus/master/mainwindow.h +++ b/examples/serialbus/modbus/master/mainwindow.h @@ -83,24 +83,24 @@ private: QModbusDataUnit writeRequest() const; private slots: - void on_connectButton_clicked(); - void onStateChanged(int state); + void onConnectButtonClicked(); + void onModbusStateChanged(int state); - void on_readButton_clicked(); - void readReady(); + void onReadButtonClicked(); + void onReadReady(); - void on_writeButton_clicked(); - void on_readWriteButton_clicked(); + void onWriteButtonClicked(); + void onReadWriteButtonClicked(); - void on_connectType_currentIndexChanged(int); - void on_writeTable_currentIndexChanged(int); + void onConnectTypeChanged(int); + void onWriteTableChanged(int); private: - Ui::MainWindow *ui; - QModbusReply *lastRequest; - QModbusClient *modbusDevice; - SettingsDialog *m_settingsDialog; - WriteRegisterModel *writeModel; + Ui::MainWindow *ui = nullptr; + QModbusReply *lastRequest = nullptr; + QModbusClient *modbusDevice = nullptr; + SettingsDialog *m_settingsDialog = nullptr; + WriteRegisterModel *writeModel = nullptr; }; #endif // MAINWINDOW_H diff --git a/examples/serialbus/modbus/master/master.pro b/examples/serialbus/modbus/master/master.pro index 188fbc1..d7a4885 100644 --- a/examples/serialbus/modbus/master/master.pro +++ b/examples/serialbus/modbus/master/master.pro @@ -7,17 +7,20 @@ TARGET = modbusmaster TEMPLATE = app CONFIG += c++11 -SOURCES += main.cpp\ - mainwindow.cpp \ - settingsdialog.cpp \ - writeregistermodel.cpp +SOURCES += \ + main.cpp\ + mainwindow.cpp \ + settingsdialog.cpp \ + writeregistermodel.cpp -HEADERS += mainwindow.h \ - settingsdialog.h \ - writeregistermodel.h +HEADERS += \ + mainwindow.h \ + settingsdialog.h \ + writeregistermodel.h -FORMS += mainwindow.ui \ - settingsdialog.ui +FORMS += \ + mainwindow.ui \ + settingsdialog.ui RESOURCES += \ master.qrc diff --git a/examples/serialbus/modbus/master/settingsdialog.h b/examples/serialbus/modbus/master/settingsdialog.h index 98ba946..fbeb97a 100644 --- a/examples/serialbus/modbus/master/settingsdialog.h +++ b/examples/serialbus/modbus/master/settingsdialog.h @@ -88,7 +88,7 @@ public: private: Settings m_settings; - Ui::SettingsDialog *ui; + Ui::SettingsDialog *ui = nullptr; }; #endif // SETTINGSDIALOG_H diff --git a/examples/serialbus/modbus/master/writeregistermodel.cpp b/examples/serialbus/modbus/master/writeregistermodel.cpp index 4b61e99..441f643 100644 --- a/examples/serialbus/modbus/master/writeregistermodel.cpp +++ b/examples/serialbus/modbus/master/writeregistermodel.cpp @@ -82,7 +82,7 @@ QVariant WriteRegisterModel::data(const QModelIndex &index, int role) const if (index.column() == CoilsColumn && role == Qt::CheckStateRole) // coils return m_coils.at(index.row()) ? Qt::Checked : Qt::Unchecked; - else if (index.column() == HoldingColumn && role == Qt::DisplayRole) //holding registers + if (index.column() == HoldingColumn && role == Qt::DisplayRole) // holding registers return QString("0x%1").arg(QString::number(m_holdingRegisters.at(index.row()), 16)); return QVariant(); @@ -146,9 +146,9 @@ Qt::ItemFlags WriteRegisterModel::flags(const QModelIndex &index) const if ((index.row() < m_address) || (index.row() >= (m_address + m_number))) flags &= ~Qt::ItemIsEnabled; - if (index.column() == CoilsColumn) //coils + if (index.column() == CoilsColumn) // coils return flags | Qt::ItemIsUserCheckable; - if (index.column() == HoldingColumn) //holding registers + if (index.column() == HoldingColumn) // holding registers return flags | Qt::ItemIsEditable; return flags; diff --git a/examples/serialbus/modbus/master/writeregistermodel.h b/examples/serialbus/modbus/master/writeregistermodel.h index fe49591..4b0311e 100644 --- a/examples/serialbus/modbus/master/writeregistermodel.h +++ b/examples/serialbus/modbus/master/writeregistermodel.h @@ -79,8 +79,8 @@ signals: void updateViewport(); public: - int m_number; - int m_address; + int m_number = 0; + int m_address = 0; QBitArray m_coils; QVector m_holdingRegisters; }; diff --git a/examples/serialbus/modbus/slave/main.cpp b/examples/serialbus/modbus/slave/main.cpp index 4f97a39..19a1d5b 100644 --- a/examples/serialbus/modbus/slave/main.cpp +++ b/examples/serialbus/modbus/slave/main.cpp @@ -55,9 +55,8 @@ int main(int argc, char *argv[]) { - // TODO uncomment this line before release - // right now we always need it - QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = true")); + // Uncomment the following line to enable logging + // QLoggingCategory::setFilterRules(QStringLiteral("qt.modbus* = true")); QApplication a(argc, argv); MainWindow w; w.show(); diff --git a/examples/serialbus/modbus/slave/mainwindow.cpp b/examples/serialbus/modbus/slave/mainwindow.cpp index 4a4c194..dc31196 100644 --- a/examples/serialbus/modbus/slave/mainwindow.cpp +++ b/examples/serialbus/modbus/slave/mainwindow.cpp @@ -67,18 +67,17 @@ enum ModbusConnection { MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) - , modbusDevice(nullptr) { ui->setupUi(this); setupWidgetContainers(); #if QT_CONFIG(modbus_serialport) ui->connectType->setCurrentIndex(0); - on_connectType_currentIndexChanged(0); + onCurrentConnectTypeChanged(0); #else // lock out the serial port option ui->connectType->setCurrentIndex(1); - on_connectType_currentIndexChanged(1); + onCurrentConnectTypeChanged(1); ui->connectType->setEnabled(false); #endif @@ -102,16 +101,20 @@ void MainWindow::initActions() ui->actionExit->setEnabled(true); ui->actionOptions->setEnabled(true); + connect(ui->connectButton, &QPushButton::clicked, + this, &MainWindow::onConnectButtonClicked); connect(ui->actionConnect, &QAction::triggered, - this, &MainWindow::on_connectButton_clicked); + this, &MainWindow::onConnectButtonClicked); connect(ui->actionDisconnect, &QAction::triggered, - this, &MainWindow::on_connectButton_clicked); + this, &MainWindow::onConnectButtonClicked); + connect(ui->connectType, QOverload::of(&QComboBox::currentIndexChanged), + this, &MainWindow::onCurrentConnectTypeChanged); connect(ui->actionExit, &QAction::triggered, this, &QMainWindow::close); connect(ui->actionOptions, &QAction::triggered, m_settingsDialog, &QDialog::show); } -void MainWindow::on_connectType_currentIndexChanged(int index) +void MainWindow::onCurrentConnectTypeChanged(int index) { if (modbusDevice) { modbusDevice->disconnect(); @@ -119,7 +122,7 @@ void MainWindow::on_connectType_currentIndexChanged(int index) modbusDevice = nullptr; } - ModbusConnection type = static_cast (index); + auto type = static_cast(index); if (type == Serial) { #if QT_CONFIG(modbus_serialport) modbusDevice = new QModbusRtuSerialSlave(this); @@ -176,14 +179,14 @@ void MainWindow::handleDeviceError(QModbusDevice::Error newError) statusBar()->showMessage(modbusDevice->errorString(), 5000); } -void MainWindow::on_connectButton_clicked() +void MainWindow::onConnectButtonClicked() { bool intendToConnect = (modbusDevice->state() == QModbusDevice::UnconnectedState); statusBar()->clearMessage(); if (intendToConnect) { - if (static_cast (ui->connectType->currentIndex()) == Serial) { + if (static_cast(ui->connectType->currentIndex()) == Serial) { modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, ui->portEdit->text()); #if QT_CONFIG(modbus_serialport) @@ -244,7 +247,7 @@ void MainWindow::bitChanged(int id, QModbusDataUnit::RegisterType table, bool va if (!modbusDevice) return; - if (!modbusDevice->setData(table, id, value)) + if (!modbusDevice->setData(table, quint16(id), value)) statusBar()->showMessage(tr("Could not set data: ") + modbusDevice->errorString(), 5000); } @@ -256,11 +259,11 @@ void MainWindow::setRegister(const QString &value) const QString objectName = QObject::sender()->objectName(); if (registers.contains(objectName)) { bool ok = true; - const int id = QObject::sender()->property("ID").toInt(); + const quint16 id = quint16(QObject::sender()->property("ID").toUInt()); if (objectName.startsWith(QStringLiteral("inReg"))) - ok = modbusDevice->setData(QModbusDataUnit::InputRegisters, id, value.toInt(&ok, 16)); + ok = modbusDevice->setData(QModbusDataUnit::InputRegisters, id, value.toUShort(&ok, 16)); else if (objectName.startsWith(QStringLiteral("holdReg"))) - ok = modbusDevice->setData(QModbusDataUnit::HoldingRegisters, id, value.toInt(&ok, 16)); + ok = modbusDevice->setData(QModbusDataUnit::HoldingRegisters, id, value.toUShort(&ok, 16)); if (!ok) statusBar()->showMessage(tr("Could not set register: ") + modbusDevice->errorString(), @@ -275,11 +278,11 @@ void MainWindow::updateWidgets(QModbusDataUnit::RegisterType table, int address, QString text; switch (table) { case QModbusDataUnit::Coils: - modbusDevice->data(QModbusDataUnit::Coils, address + i, &value); + modbusDevice->data(QModbusDataUnit::Coils, quint16(address + i), &value); coilButtons.button(address + i)->setChecked(value); break; case QModbusDataUnit::HoldingRegisters: - modbusDevice->data(QModbusDataUnit::HoldingRegisters, address + i, &value); + modbusDevice->data(QModbusDataUnit::HoldingRegisters, quint16(address + i), &value); registers.value(QStringLiteral("holdReg_%1").arg(address + i))->setText(text .setNum(value, 16)); break; @@ -296,10 +299,10 @@ void MainWindow::setupDeviceData() if (!modbusDevice) return; - for (int i = 0; i < coilButtons.buttons().count(); ++i) + for (quint16 i = 0; i < coilButtons.buttons().count(); ++i) modbusDevice->setData(QModbusDataUnit::Coils, i, coilButtons.button(i)->isChecked()); - for (int i = 0; i < discreteButtons.buttons().count(); ++i) { + for (quint16 i = 0; i < discreteButtons.buttons().count(); ++i) { modbusDevice->setData(QModbusDataUnit::DiscreteInputs, i, discreteButtons.button(i)->isChecked()); } @@ -307,11 +310,11 @@ void MainWindow::setupDeviceData() bool ok; for (QLineEdit *widget : qAsConst(registers)) { if (widget->objectName().startsWith(QStringLiteral("inReg"))) { - modbusDevice->setData(QModbusDataUnit::InputRegisters, widget->property("ID").toInt(), - widget->text().toInt(&ok, 16)); + modbusDevice->setData(QModbusDataUnit::InputRegisters, quint16(widget->property("ID").toUInt()), + widget->text().toUShort(&ok, 16)); } else if (widget->objectName().startsWith(QStringLiteral("holdReg"))) { - modbusDevice->setData(QModbusDataUnit::HoldingRegisters, widget->property("ID").toInt(), - widget->text().toInt(&ok, 16)); + modbusDevice->setData(QModbusDataUnit::HoldingRegisters, quint16(widget->property("ID").toUInt()), + widget->text().toUShort(&ok, 16)); } } } diff --git a/examples/serialbus/modbus/slave/mainwindow.h b/examples/serialbus/modbus/slave/mainwindow.h index aec1e9d..e824649 100644 --- a/examples/serialbus/modbus/slave/mainwindow.h +++ b/examples/serialbus/modbus/slave/mainwindow.h @@ -77,7 +77,7 @@ public: ~MainWindow(); private Q_SLOTS: - void on_connectButton_clicked(); + void onConnectButtonClicked(); void onStateChanged(int state); void coilChanged(int id); @@ -87,7 +87,7 @@ private Q_SLOTS: void setRegister(const QString &value); void updateWidgets(QModbusDataUnit::RegisterType table, int address, int size); - void on_connectType_currentIndexChanged(int); + void onCurrentConnectTypeChanged(int); void handleDeviceError(QModbusDevice::Error newError); @@ -96,13 +96,13 @@ private: void setupDeviceData(); void setupWidgetContainers(); - Ui::MainWindow *ui; - QModbusServer *modbusDevice; + Ui::MainWindow *ui = nullptr; + QModbusServer *modbusDevice = nullptr; QButtonGroup coilButtons; QButtonGroup discreteButtons; QHash registers; - SettingsDialog *m_settingsDialog; + SettingsDialog *m_settingsDialog = nullptr; }; #endif // MAINWINDOW_H diff --git a/examples/serialbus/modbus/slave/slave.pro b/examples/serialbus/modbus/slave/slave.pro index aadef07..2e128c2 100644 --- a/examples/serialbus/modbus/slave/slave.pro +++ b/examples/serialbus/modbus/slave/slave.pro @@ -7,13 +7,18 @@ TARGET = modbusslave TEMPLATE = app CONFIG += c++11 -SOURCES += main.cpp\ - mainwindow.cpp \ - settingsdialog.cpp +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + settingsdialog.cpp -HEADERS += mainwindow.h settingsdialog.h +HEADERS += \ + mainwindow.h \ + settingsdialog.h -FORMS += mainwindow.ui settingsdialog.ui +FORMS += \ + mainwindow.ui \ + settingsdialog.ui RESOURCES += slave.qrc -- cgit v1.2.3