feat: 监听剪贴板
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
project(cbh VERSION 0.1 LANGUAGES CXX)
|
project(cbh VERSION 0.1 LANGUAGES CXX)
|
||||||
|
include(FetchContent) # FetchContent 支持
|
||||||
|
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
set(CMAKE_AUTOMOC ON)
|
||||||
@@ -9,6 +10,13 @@ set(CMAKE_AUTORCC ON)
|
|||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
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路径
|
# 在这里配置QT路径
|
||||||
SET(QT_SDK_DIR E:/Programs/Qt/6.9.2/mingw_64 CACHE PATH "QT SDK DIR" FORCE)
|
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}")
|
message("在CMAKE中配置 QT_SDK_DIR 选项指定QT路径; 当前路径: ${QT_SDK_DIR}")
|
||||||
@@ -34,6 +42,7 @@ target_link_libraries(cbh PRIVATE
|
|||||||
Qt6::Core
|
Qt6::Core
|
||||||
Qt6::Gui
|
Qt6::Gui
|
||||||
ElaWidgetTools
|
ElaWidgetTools
|
||||||
|
sqlite_orm::sqlite_orm
|
||||||
)
|
)
|
||||||
|
|
||||||
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
|
||||||
|
|||||||
54
src/clipboard.cpp
Normal file
54
src/clipboard.cpp
Normal file
@@ -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<StorageT> storage;
|
||||||
|
|
||||||
|
ClipboardMonitor::ClipboardMonitor(QObject *parent) : QObject(parent) {
|
||||||
|
// 生成数据库连接
|
||||||
|
storage =
|
||||||
|
std::make_unique<StorageT>(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();
|
||||||
|
// // 处理图像...
|
||||||
|
// }
|
||||||
|
}
|
||||||
30
src/clipboard.h
Normal file
30
src/clipboard.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "sqlite_orm/sqlite_orm.h"
|
||||||
|
#include <QApplication>
|
||||||
|
#include <QClipboard>
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QMimeData>
|
||||||
|
|
||||||
|
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();
|
||||||
|
};
|
||||||
@@ -2,12 +2,14 @@
|
|||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
#include "clipboard.h"
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
#include <Windows.h>
|
#include <Windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
QApplication a(argc, argv);
|
QApplication a(argc, argv);
|
||||||
|
ClipboardMonitor cbm(&a);
|
||||||
eApp->init();
|
eApp->init();
|
||||||
MainWindow w;
|
MainWindow w;
|
||||||
w.show();
|
w.show();
|
||||||
|
|||||||
Reference in New Issue
Block a user