From 7d323d990444c3e918a90455f8edaf4169cefb17 Mon Sep 17 00:00:00 2001 From: sleepwithoutbz Date: Mon, 22 Sep 2025 01:20:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9B=91=E5=90=AC=E5=89=AA=E8=B4=B4?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 9 ++++++++ src/clipboard.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++ src/clipboard.h | 30 ++++++++++++++++++++++++++ src/main.cpp | 2 ++ 4 files changed, 95 insertions(+) create mode 100644 src/clipboard.cpp create mode 100644 src/clipboard.h diff --git a/CMakeLists.txt b/CMakeLists.txt index b01579a..f97e312 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 3.16) project(cbh VERSION 0.1 LANGUAGES CXX) +include(FetchContent) # FetchContent 支持 set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) @@ -9,6 +10,13 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +# sqlite_orm库 +FetchContent_Declare(sqliteOrm + GIT_REPOSITORY https://github.com/fnc12/sqlite_orm + GIT_TAG v1.9.1 +) +FetchContent_MakeAvailable(sqliteOrm) + # 在这里配置QT路径 SET(QT_SDK_DIR E:/Programs/Qt/6.9.2/mingw_64 CACHE PATH "QT SDK DIR" FORCE) message("在CMAKE中配置 QT_SDK_DIR 选项指定QT路径; 当前路径: ${QT_SDK_DIR}") @@ -34,6 +42,7 @@ target_link_libraries(cbh PRIVATE Qt6::Core Qt6::Gui ElaWidgetTools + sqlite_orm::sqlite_orm ) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. diff --git a/src/clipboard.cpp b/src/clipboard.cpp new file mode 100644 index 0000000..b39f332 --- /dev/null +++ b/src/clipboard.cpp @@ -0,0 +1,54 @@ +#include "clipboard.h" +#include "sqlite_orm/sqlite_orm.h" + +// using sqlite_orm::datetime; +// using sqlite_orm::default_value; +using sqlite_orm::make_column; +using sqlite_orm::make_storage; +using sqlite_orm::make_table; +using sqlite_orm::primary_key; + +// 1. 直接定义静态变量 +// static decltype(auto) storage = make_storage("./cbh.db", make_table("CBRows", make_column("id", &CBRow::id, primary_key().autoincrement()), +// make_column("content", &CBRow::content), make_column("time", &CBRow::time))); + +// 2. 先创建类型,再定义智能指针 +using StorageT = decltype(make_storage("./cbh.db", make_table("CBRows", make_column("id", &CBRow::id, primary_key().autoincrement()), + make_column("content", &CBRow::content), make_column("time", &CBRow::time)))); +std::unique_ptr storage; + +ClipboardMonitor::ClipboardMonitor(QObject *parent) : QObject(parent) { + // 生成数据库连接 + storage = + std::make_unique(make_storage("./cbh.db", make_table("CBRows", make_column("id", &CBRow::id, primary_key().autoincrement()), + make_column("content", &CBRow::content), make_column("time", &CBRow::time)))); + storage->sync_schema(); + // 获取系统剪贴板 + QClipboard *clipboard = QApplication::clipboard(); + // 连接 dataChanged 信号到自定义的 onClipboardChanged 槽函数 + connect(clipboard, &QClipboard::dataChanged, this, &ClipboardMonitor::onClipboardChanged); +} + +ClipboardMonitor::~ClipboardMonitor() {} + +void ClipboardMonitor::onClipboardChanged() { + // 获取剪贴板对象 + QClipboard *clipboard = QApplication::clipboard(); + + // 检查是否有文本内容 + if (clipboard->mimeData()->hasText()) { + QString text = clipboard->text(); + qDebug() << "Clipboard text changed:" << text; + storage->insert(CBRow{ + -1, + text.toStdString(), + storage->select(datetime("now")).front(), + }); + } + + // 你也可以检查其他格式,如图像 + // if (clipboard->mimeData()->hasImage()) { + // QPixmap pixmap = clipboard->pixmap(); + // // 处理图像... + // } +} diff --git a/src/clipboard.h b/src/clipboard.h new file mode 100644 index 0000000..7e2891a --- /dev/null +++ b/src/clipboard.h @@ -0,0 +1,30 @@ +#pragma once + +#include "sqlite_orm/sqlite_orm.h" +#include +#include +#include +#include + +using sqlite_orm::datetime; +// using sqlite_orm::default_value; +using sqlite_orm::make_column; +using sqlite_orm::make_storage; +using sqlite_orm::make_table; +using sqlite_orm::primary_key; + +struct CBRow { + int id; + std::string content; + std::string time; +}; + +class ClipboardMonitor : public QObject { + Q_OBJECT +public: + ClipboardMonitor(QObject *parent = nullptr); + ~ClipboardMonitor(); + +private slots: + void onClipboardChanged(); +}; diff --git a/src/main.cpp b/src/main.cpp index bdfb53b..0839aae 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,12 +2,14 @@ #include #include #include "window.h" +#include "clipboard.h" #ifdef Q_OS_WIN #include #endif int main(int argc, char *argv[]) { QApplication a(argc, argv); + ClipboardMonitor cbm(&a); eApp->init(); MainWindow w; w.show();