diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2023-02-07 10:37:39 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-14 11:46:32 +0000 |
commit | aa075721774b11825dfdb4d52511a2c2510d956e (patch) | |
tree | 3183c721808cef72b88df7fa0084f86cad413c1f | |
parent | 9bced756b4776051b38969f097f82339554479f3 (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.cpp | 21 |
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() |