diff --git a/QtScrcpy/device/device.cpp b/QtScrcpy/device/device.cpp index d898920..e6ccb72 100644 --- a/QtScrcpy/device/device.cpp +++ b/QtScrcpy/device/device.cpp @@ -71,6 +71,7 @@ Device::~Device() delete m_vb; } if (m_videoForm) { + m_videoForm->close(); delete m_videoForm; } emit deviceDisconnect(m_params.serial); @@ -218,6 +219,11 @@ void Device::initSignals() if (m_videoForm) { m_videoForm->setWindowTitle(deviceName); m_videoForm->updateShowSize(size); + + QRect rc = Config::getInstance().getRect(getSerial()); + if (rc.isValid()) { + m_videoForm->setGeometry(rc); + } } // init recorder diff --git a/QtScrcpy/device/ui/videoform.cpp b/QtScrcpy/device/ui/videoform.cpp index d84baa4..1f77b7a 100644 --- a/QtScrcpy/device/ui/videoform.cpp +++ b/QtScrcpy/device/ui/videoform.cpp @@ -430,6 +430,15 @@ void VideoForm::resizeEvent(QResizeEvent *event) } } +void VideoForm::closeEvent(QCloseEvent *event) +{ + Q_UNUSED(event) + if (!m_device) { + return; + } + Config::getInstance().setRect(m_device->getSerial(), geometry()); +} + void VideoForm::dragEnterEvent(QDragEnterEvent *event) { event->acceptProposedAction(); diff --git a/QtScrcpy/device/ui/videoform.h b/QtScrcpy/device/ui/videoform.h index f2a3d09..be05b83 100644 --- a/QtScrcpy/device/ui/videoform.h +++ b/QtScrcpy/device/ui/videoform.h @@ -49,6 +49,7 @@ protected: void paintEvent(QPaintEvent *); void showEvent(QShowEvent *event); void resizeEvent(QResizeEvent *event); + void closeEvent(QCloseEvent *event); void dragEnterEvent(QDragEnterEvent *event); void dragMoveEvent(QDragMoveEvent *event); diff --git a/QtScrcpy/util/config.cpp b/QtScrcpy/util/config.cpp index 630faea..2f7b0a7 100644 --- a/QtScrcpy/util/config.cpp +++ b/QtScrcpy/util/config.cpp @@ -44,6 +44,12 @@ #define COMMON_RECORD_FORMAT_INDEX_KEY "RecordFormatIndex" #define COMMON_RECORD_FORMAT_INDEX_DEF 0 +#define SERIAL_WINDOW_RECT_KEY_X "WindowRectX" +#define SERIAL_WINDOW_RECT_KEY_Y "WindowRectY" +#define SERIAL_WINDOW_RECT_KEY_W "WindowRectW" +#define SERIAL_WINDOW_RECT_KEY_H "WindowRectH" +#define SERIAL_WINDOW_RECT_KEY_DEF -1 + // 最大尺寸 录制格式 QString Config::s_configPath = ""; @@ -140,6 +146,29 @@ void Config::setRecordFormatIndex(int recordFormatIndex) m_userData->endGroup(); } +void Config::setRect(const QString &serial, const QRect &rc) +{ + m_userData->beginGroup(serial); + m_userData->setValue(SERIAL_WINDOW_RECT_KEY_X, rc.left()); + m_userData->setValue(SERIAL_WINDOW_RECT_KEY_Y, rc.top()); + m_userData->setValue(SERIAL_WINDOW_RECT_KEY_W, rc.width()); + m_userData->setValue(SERIAL_WINDOW_RECT_KEY_H, rc.height()); + m_userData->endGroup(); + m_userData->sync(); +} + +QRect Config::getRect(const QString &serial) +{ + QRect rc; + m_userData->beginGroup(serial); + rc.setX(m_userData->value(SERIAL_WINDOW_RECT_KEY_X, SERIAL_WINDOW_RECT_KEY_DEF).toInt()); + rc.setY(m_userData->value(SERIAL_WINDOW_RECT_KEY_Y, SERIAL_WINDOW_RECT_KEY_DEF).toInt()); + rc.setWidth(m_userData->value(SERIAL_WINDOW_RECT_KEY_W, SERIAL_WINDOW_RECT_KEY_DEF).toInt()); + rc.setHeight(m_userData->value(SERIAL_WINDOW_RECT_KEY_H, SERIAL_WINDOW_RECT_KEY_DEF).toInt()); + m_userData->endGroup(); + return rc; +} + QString Config::getServerVersion() { QString server; diff --git a/QtScrcpy/util/config.h b/QtScrcpy/util/config.h index 9e91841..e635278 100644 --- a/QtScrcpy/util/config.h +++ b/QtScrcpy/util/config.h @@ -3,6 +3,7 @@ #include #include +#include class QSettings; class Config : public QObject @@ -29,6 +30,8 @@ public: void setMaxSizeIndex(int maxSizeIndex); int getRecordFormatIndex(); void setRecordFormatIndex(int recordFormatIndex); + void setRect(const QString &serial, const QRect &rc); + QRect getRect(const QString &serial); private: explicit Config(QObject *parent = nullptr);