summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2023-02-07 10:37:39 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-02-14 11:46:32 +0000
commitaa075721774b11825dfdb4d52511a2c2510d956e (patch)
tree3183c721808cef72b88df7fa0084f86cad413c1f
parent9bced756b4776051b38969f097f82339554479f3 (diff)
Modbus client: improve UI
* Disable connection type combobox, port line edit and server address spinbox when the connection is established. * Add a tooltip for the expected contents of port line edit. * Update default TCP port to 50200 so that it does not require ROOT privileges on Linux. * Use QSerialPortInfo::availablePorts() to fill a default port name for serial connection. Task-number: QTBUG-110890 Change-Id: I534955726da468da9213cff8b43ae0603afe0036 Reviewed-by: André Hartmann <aha_1980@gmx.de> (cherry picked from commit 3287a82b4afe618144e257ab6dbe06fc34628aab) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--examples/serialbus/modbus/client/mainwindow.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/examples/serialbus/modbus/client/mainwindow.cpp b/examples/serialbus/modbus/client/mainwindow.cpp
index 09b8953..81ac626 100644
--- a/examples/serialbus/modbus/client/mainwindow.cpp
+++ b/examples/serialbus/modbus/client/mainwindow.cpp
@@ -9,6 +9,7 @@
#include <QModbusTcpClient>
#if QT_CONFIG(modbus_serialport)
# include <QModbusRtuSerialClient>
+# include <QSerialPortInfo>
#endif
#include <QStandardItemModel>
#include <QStatusBar>
@@ -45,6 +46,10 @@ MainWindow::MainWindow(QWidget *parent)
ui->writeTable->addItem(tr("Input Registers"), QModbusDataUnit::InputRegisters);
ui->writeTable->addItem(tr("Holding Registers"), QModbusDataUnit::HoldingRegisters);
+ ui->portEdit->setToolTip(tr("For serial connection enter COM port name\n"
+ "(eg. COM1, ttyS0, etc).\n"
+ "For TCP connection enter\n<ip address>:<port> pair."));
+
#if QT_CONFIG(modbus_serialport)
ui->connectType->setCurrentIndex(0);
onConnectTypeChanged(0);
@@ -129,11 +134,19 @@ void MainWindow::onConnectTypeChanged(int index)
if (type == Serial) {
#if QT_CONFIG(modbus_serialport)
modbusDevice = new QModbusRtuSerialClient(this);
+ // Try to fill in the first available serial port name if the line edit
+ // is empty, or contains a url (assume that ':' is only a part of url).
+ const auto ports = QSerialPortInfo::availablePorts();
+ const auto currentText = ui->portEdit->text();
+ if (!ports.isEmpty() && (currentText.isEmpty() || currentText.contains(u':')))
+ ui->portEdit->setText(ports.front().portName());
#endif
} else if (type == Tcp) {
modbusDevice = new QModbusTcpClient(this);
- if (ui->portEdit->text().isEmpty())
- ui->portEdit->setText(QLatin1String("127.0.0.1:502"));
+ const QUrl currentUrl = QUrl::fromUserInput(ui->portEdit->text());
+ // Check if we already have <ip address>:<port>
+ if (currentUrl.port() <= 0)
+ ui->portEdit->setText(QLatin1String("127.0.0.1:50200"));
}
connect(modbusDevice, &QModbusClient::errorOccurred, [this](QModbusDevice::Error) {
@@ -200,6 +213,10 @@ void MainWindow::onModbusStateChanged(int state)
ui->connectButton->setText(tr("Connect"));
else if (state == QModbusDevice::ConnectedState)
ui->connectButton->setText(tr("Disconnect"));
+
+ ui->connectType->setEnabled(!connected);
+ ui->portEdit->setEnabled(!connected);
+ ui->serverEdit->setEnabled(!connected);
}
void MainWindow::onReadButtonClicked()