diff --git a/QtScrcpy/ui/dialog.cpp b/QtScrcpy/ui/dialog.cpp
index 1350fec..ea59d23 100644
--- a/QtScrcpy/ui/dialog.cpp
+++ b/QtScrcpy/ui/dialog.cpp
@@ -82,21 +82,21 @@ Dialog::Dialog(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
log = "ip not find, connect to wifi?";
break;
}
- ui->deviceIpEdt->setText(ip);
+ ui->deviceIpEdt->setEditText(ip);
} else if (args.contains("ifconfig") && args.contains("wlan0")) {
QString ip = m_adb.getDeviceIPFromStdOut();
if (ip.isEmpty()) {
log = "ip not find, connect to wifi?";
break;
}
- ui->deviceIpEdt->setText(ip);
+ ui->deviceIpEdt->setEditText(ip);
} else if (args.contains("ip -o a")) {
QString ip = m_adb.getDeviceIPByIpFromStdOut();
if (ip.isEmpty()) {
log = "ip not find, connect to wifi?";
break;
}
- ui->deviceIpEdt->setText(ip);
+ ui->deviceIpEdt->setEditText(ip);
}
break;
}
@@ -164,6 +164,16 @@ void Dialog::initUI()
ui->lockOrientationBox->addItem("180");
ui->lockOrientationBox->addItem("270");
ui->lockOrientationBox->setCurrentIndex(0);
+
+ // 加载IP历史记录
+ loadIpHistory();
+
+ // 为deviceIpEdt添加右键菜单
+ if (ui->deviceIpEdt->lineEdit()) {
+ ui->deviceIpEdt->lineEdit()->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(ui->deviceIpEdt->lineEdit(), &QWidget::customContextMenuRequested,
+ this, &Dialog::showIpEditMenu);
+ }
}
void Dialog::updateBootConfig(bool toView)
@@ -216,6 +226,12 @@ void Dialog::updateBootConfig(bool toView)
config.autoUpdateDevice = ui->autoUpdatecheckBox->isChecked();
config.showToolbar = ui->showToolbar->isChecked();
+ // 保存当前IP到历史记录
+ QString currentIp = ui->deviceIpEdt->currentText().trimmed();
+ if (!currentIp.isEmpty()) {
+ saveIpHistory(currentIp);
+ }
+
Config::getInstance().setUserBootConfig(config);
}
}
@@ -344,7 +360,7 @@ void Dialog::on_wirelessConnectBtn_clicked()
if (checkAdbRun()) {
return;
}
- QString addr = ui->deviceIpEdt->text().trimmed();
+ QString addr = ui->deviceIpEdt->currentText().trimmed();
if (!ui->devicePortEdt->text().isEmpty()) {
addr += ":";
addr += ui->devicePortEdt->text().trimmed();
@@ -356,6 +372,12 @@ void Dialog::on_wirelessConnectBtn_clicked()
return;
}
+ // 保存IP历史记录 - 只保存IP部分,不包含端口
+ QString ip = addr.split(":").first();
+ if (!ip.isEmpty()) {
+ saveIpHistory(ip);
+ }
+
outLog("wireless connect...", false);
QStringList adbArgs;
adbArgs << "connect";
@@ -516,7 +538,7 @@ void Dialog::on_wirelessDisConnectBtn_clicked()
if (checkAdbRun()) {
return;
}
- QString addr = ui->deviceIpEdt->text().trimmed();
+ QString addr = ui->deviceIpEdt->currentText().trimmed();
outLog("wireless disconnect...", false);
QStringList adbArgs;
adbArgs << "disconnect";
@@ -767,3 +789,45 @@ void Dialog::on_autoUpdatecheckBox_toggled(bool checked)
m_autoUpdatetimer.stop();
}
}
+
+void Dialog::loadIpHistory()
+{
+ QStringList ipList = Config::getInstance().getIpHistory();
+ ui->deviceIpEdt->clear();
+ ui->deviceIpEdt->addItems(ipList);
+ ui->deviceIpEdt->setContentsMargins(0, 0, 0, 0);
+
+ if (ui->deviceIpEdt->lineEdit()) {
+ ui->deviceIpEdt->lineEdit()->setMaxLength(128);
+ ui->deviceIpEdt->lineEdit()->setPlaceholderText("192.168.0.1");
+ }
+}
+
+void Dialog::saveIpHistory(const QString &ip)
+{
+ if (ip.isEmpty()) {
+ return;
+ }
+
+ Config::getInstance().saveIpHistory(ip);
+
+ // 更新ComboBox
+ loadIpHistory();
+ ui->deviceIpEdt->setCurrentText(ip);
+}
+
+void Dialog::showIpEditMenu(const QPoint &pos)
+{
+ QMenu *menu = ui->deviceIpEdt->lineEdit()->createStandardContextMenu();
+ menu->addSeparator();
+
+ QAction *clearHistoryAction = new QAction(tr("Clear History"), menu);
+ connect(clearHistoryAction, &QAction::triggered, this, [this]() {
+ Config::getInstance().clearIpHistory();
+ loadIpHistory();
+ });
+
+ menu->addAction(clearHistoryAction);
+ menu->exec(ui->deviceIpEdt->lineEdit()->mapToGlobal(pos));
+ delete menu;
+}
diff --git a/QtScrcpy/ui/dialog.h b/QtScrcpy/ui/dialog.h
index 860c87e..6766017 100644
--- a/QtScrcpy/ui/dialog.h
+++ b/QtScrcpy/ui/dialog.h
@@ -67,6 +67,8 @@ private slots:
void on_autoUpdatecheckBox_toggled(bool checked);
+ void showIpEditMenu(const QPoint &pos);
+
private:
bool checkAdbRun();
void initUI();
@@ -78,6 +80,8 @@ private:
int findDeviceFromeSerialBox(bool wifi);
quint32 getBitRate();
const QString &getServerPath();
+ void loadIpHistory();
+ void saveIpHistory(const QString &ip);
protected:
void closeEvent(QCloseEvent *event);
diff --git a/QtScrcpy/ui/dialog.ui b/QtScrcpy/ui/dialog.ui
index e46e06b..7a7702d 100644
--- a/QtScrcpy/ui/dialog.ui
+++ b/QtScrcpy/ui/dialog.ui
@@ -1059,22 +1059,25 @@
5
-
-
+
0
0
-
+
+
+ 200
+ 0
+
+
+
+ true
+
+
-
- 128
-
-
- 192.168.0.1
-
-
diff --git a/QtScrcpy/util/config.cpp b/QtScrcpy/util/config.cpp
index 2290426..53a3c21 100644
--- a/QtScrcpy/util/config.cpp
+++ b/QtScrcpy/util/config.cpp
@@ -108,6 +108,11 @@
#define SERIAL_NICK_NAME_KEY "NickName"
#define SERIAL_NICK_NAME_DEF "Phone"
+// IP history
+#define IP_HISTORY_KEY "IpHistory"
+#define IP_HISTORY_DEF ""
+#define IP_HISTORY_MAX 10
+
QString Config::s_configPath = "";
Config::Config(QObject *parent) : QObject(parent)
@@ -372,3 +377,34 @@ QString Config::getTitle()
m_settings->endGroup();
return title;
}
+
+void Config::saveIpHistory(const QString &ip)
+{
+ QStringList ipList = getIpHistory();
+
+ // 移除已存在的相同IP(避免重复)
+ ipList.removeAll(ip);
+
+ // 将新IP添加到开头
+ ipList.prepend(ip);
+
+ // 限制历史记录数量
+ while (ipList.size() > IP_HISTORY_MAX) {
+ ipList.removeLast();
+ }
+
+ m_userData->setValue(IP_HISTORY_KEY, ipList);
+ m_userData->sync();
+}
+
+QStringList Config::getIpHistory()
+{
+ QStringList ipList = m_userData->value(IP_HISTORY_KEY, IP_HISTORY_DEF).toStringList();
+ return ipList;
+}
+
+void Config::clearIpHistory()
+{
+ m_userData->remove(IP_HISTORY_KEY);
+ m_userData->sync();
+}
diff --git a/QtScrcpy/util/config.h b/QtScrcpy/util/config.h
index 6f3c1d9..4e14961 100644
--- a/QtScrcpy/util/config.h
+++ b/QtScrcpy/util/config.h
@@ -62,6 +62,11 @@ public:
void deleteGroup(const QString &serial);
+ // IP history methods
+ void saveIpHistory(const QString &ip);
+ QStringList getIpHistory();
+ void clearIpHistory();
+
private:
explicit Config(QObject *parent = nullptr);
const QString &getConfigPath();