diff --git a/QtScrcpy/ui/dialog.cpp b/QtScrcpy/ui/dialog.cpp
index ea59d23..a47cda4 100644
--- a/QtScrcpy/ui/dialog.cpp
+++ b/QtScrcpy/ui/dialog.cpp
@@ -168,12 +168,22 @@ void Dialog::initUI()
// 加载IP历史记录
loadIpHistory();
+ // 加载端口历史记录
+ loadPortHistory();
+
// 为deviceIpEdt添加右键菜单
if (ui->deviceIpEdt->lineEdit()) {
ui->deviceIpEdt->lineEdit()->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->deviceIpEdt->lineEdit(), &QWidget::customContextMenuRequested,
this, &Dialog::showIpEditMenu);
}
+
+ // 为devicePortEdt添加右键菜单
+ if (ui->devicePortEdt->lineEdit()) {
+ ui->devicePortEdt->lineEdit()->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(ui->devicePortEdt->lineEdit(), &QWidget::customContextMenuRequested,
+ this, &Dialog::showPortEditMenu);
+ }
}
void Dialog::updateBootConfig(bool toView)
@@ -361,12 +371,14 @@ void Dialog::on_wirelessConnectBtn_clicked()
return;
}
QString addr = ui->deviceIpEdt->currentText().trimmed();
- if (!ui->devicePortEdt->text().isEmpty()) {
+ if (addr.isEmpty()) {
+ outLog("error: device ip is null", false);
+ return;
+ }
+
+ if (!ui->devicePortEdt->currentText().isEmpty()) {
addr += ":";
- addr += ui->devicePortEdt->text().trimmed();
- } else if (!ui->devicePortEdt->placeholderText().isEmpty()) {
- addr += ":";
- addr += ui->devicePortEdt->placeholderText().trimmed();
+ addr += ui->devicePortEdt->currentText().trimmed();
} else {
outLog("error: device port is null", false);
return;
@@ -377,6 +389,12 @@ void Dialog::on_wirelessConnectBtn_clicked()
if (!ip.isEmpty()) {
saveIpHistory(ip);
}
+
+ // 保存端口历史记录
+ QString port = addr.split(":").last();
+ if (!port.isEmpty() && port != ip) {
+ savePortHistory(port);
+ }
outLog("wireless connect...", false);
QStringList adbArgs;
@@ -831,3 +849,45 @@ void Dialog::showIpEditMenu(const QPoint &pos)
menu->exec(ui->deviceIpEdt->lineEdit()->mapToGlobal(pos));
delete menu;
}
+
+void Dialog::loadPortHistory()
+{
+ QStringList portList = Config::getInstance().getPortHistory();
+ ui->devicePortEdt->clear();
+ ui->devicePortEdt->addItems(portList);
+ ui->devicePortEdt->setContentsMargins(0, 0, 0, 0);
+
+ if (ui->devicePortEdt->lineEdit()) {
+ ui->devicePortEdt->lineEdit()->setMaxLength(6);
+ ui->devicePortEdt->lineEdit()->setPlaceholderText("5555");
+ }
+}
+
+void Dialog::savePortHistory(const QString &port)
+{
+ if (port.isEmpty()) {
+ return;
+ }
+
+ Config::getInstance().savePortHistory(port);
+
+ // 更新ComboBox
+ loadPortHistory();
+ ui->devicePortEdt->setCurrentText(port);
+}
+
+void Dialog::showPortEditMenu(const QPoint &pos)
+{
+ QMenu *menu = ui->devicePortEdt->lineEdit()->createStandardContextMenu();
+ menu->addSeparator();
+
+ QAction *clearHistoryAction = new QAction(tr("Clear History"), menu);
+ connect(clearHistoryAction, &QAction::triggered, this, [this]() {
+ Config::getInstance().clearPortHistory();
+ loadPortHistory();
+ });
+
+ menu->addAction(clearHistoryAction);
+ menu->exec(ui->devicePortEdt->lineEdit()->mapToGlobal(pos));
+ delete menu;
+}
diff --git a/QtScrcpy/ui/dialog.h b/QtScrcpy/ui/dialog.h
index 6766017..577ef5a 100644
--- a/QtScrcpy/ui/dialog.h
+++ b/QtScrcpy/ui/dialog.h
@@ -82,6 +82,10 @@ private:
const QString &getServerPath();
void loadIpHistory();
void saveIpHistory(const QString &ip);
+ void loadPortHistory();
+ void savePortHistory(const QString &port);
+
+ void showPortEditMenu(const QPoint &pos);
protected:
void closeEvent(QCloseEvent *event);
diff --git a/QtScrcpy/ui/dialog.ui b/QtScrcpy/ui/dialog.ui
index 7a7702d..3d9aff9 100644
--- a/QtScrcpy/ui/dialog.ui
+++ b/QtScrcpy/ui/dialog.ui
@@ -1094,22 +1094,25 @@
-
-
+
0
0
-
+
+
+ 100
+ 0
+
+
+
+ true
+
+
-
- 6
-
-
- 5555
-
-
diff --git a/QtScrcpy/util/config.cpp b/QtScrcpy/util/config.cpp
index 8d32737..146d6c5 100644
--- a/QtScrcpy/util/config.cpp
+++ b/QtScrcpy/util/config.cpp
@@ -116,6 +116,11 @@
#define IP_HISTORY_DEF ""
#define IP_HISTORY_MAX 10
+// Port history
+#define PORT_HISTORY_KEY "PortHistory"
+#define PORT_HISTORY_DEF ""
+#define PORT_HISTORY_MAX 10
+
QString Config::s_configPath = "";
Config::Config(QObject *parent) : QObject(parent)
@@ -412,6 +417,7 @@ void Config::saveIpHistory(const QString &ip)
QStringList Config::getIpHistory()
{
QStringList ipList = m_userData->value(IP_HISTORY_KEY, IP_HISTORY_DEF).toStringList();
+ ipList.removeAll("");
return ipList;
}
@@ -420,3 +426,35 @@ void Config::clearIpHistory()
m_userData->remove(IP_HISTORY_KEY);
m_userData->sync();
}
+
+void Config::savePortHistory(const QString &port)
+{
+ QStringList portList = getPortHistory();
+
+ // 移除已存在的相同Port(避免重复)
+ portList.removeAll(port);
+
+ // 将新Port添加到开头
+ portList.prepend(port);
+
+ // 限制历史记录数量
+ while (portList.size() > PORT_HISTORY_MAX) {
+ portList.removeLast();
+ }
+
+ m_userData->setValue(PORT_HISTORY_KEY, portList);
+ m_userData->sync();
+}
+
+QStringList Config::getPortHistory()
+{
+ QStringList portList = m_userData->value(PORT_HISTORY_KEY, PORT_HISTORY_DEF).toStringList();
+ portList.removeAll("");
+ return portList;
+}
+
+void Config::clearPortHistory()
+{
+ m_userData->remove(PORT_HISTORY_KEY);
+ m_userData->sync();
+}
diff --git a/QtScrcpy/util/config.h b/QtScrcpy/util/config.h
index e45e4cd..187622a 100644
--- a/QtScrcpy/util/config.h
+++ b/QtScrcpy/util/config.h
@@ -68,6 +68,11 @@ public:
QStringList getIpHistory();
void clearIpHistory();
+ // Port history methods
+ void savePortHistory(const QString &port);
+ QStringList getPortHistory();
+ void clearPortHistory();
+
private:
explicit Config(QObject *parent = nullptr);
const QString &getConfigPath();