Skip to content

Commit 1d17bb9

Browse files
committed
fix serial ports sorting
1 parent 6157538 commit 1d17bb9

3 files changed

Lines changed: 31 additions & 4 deletions

File tree

omodsim/menuconnect.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include <QEvent>
2-
#include <QSerialPortInfo>
2+
#include "serialportutils.h"
33
#include "menuconnect.h"
44

55
///
@@ -15,10 +15,10 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
1515
{
1616
addAction(tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString());
1717

18-
for(auto&& port: QSerialPortInfo::availablePorts())
18+
for(auto&& port: getAvailableSerialPorts())
1919
{
20-
const auto text = QString(tr("Port %1")).arg(port.portName());
21-
addAction(text, ConnectionType::Serial, port.portName());
20+
const auto text = QString(tr("Port %1")).arg(port);
21+
addAction(text, ConnectionType::Serial, port);
2222
}
2323

2424
connect(&_mbMultiServer, &ModbusMultiServer::connected, this, [&](const ConnectionDetails&)

omodsim/omodsim.pro

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ HEADERS += \
178178
quintvalidator.h \
179179
recentfileactionlist.h \
180180
scriptsettings.h \
181+
serialportutils.h \
181182
windowactionlist.h
182183

183184
FORMS += \

omodsim/serialportutils.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef SERIALPORTUTILS_H
2+
#define SERIALPORTUTILS_H
3+
4+
#include <QSerialPortInfo>
5+
#include <QRegularExpression>
6+
7+
///
8+
/// \brief getAvailableSerialPorts
9+
/// \return
10+
///
11+
inline QStringList getAvailableSerialPorts()
12+
{
13+
QStringList ports;
14+
for(auto&& port: QSerialPortInfo::availablePorts())
15+
ports << port.portName();
16+
17+
static QRegularExpression re( "[^\\d]");
18+
std::sort(ports.begin(), ports.end(), [](QString p1, QString p2)
19+
{
20+
return p1.remove(re).toInt() < p2.remove(re).toInt();
21+
});
22+
23+
return ports;
24+
}
25+
26+
#endif // SERIALPORTUTILS_H

0 commit comments

Comments
 (0)