feat: 监听剪贴板
This commit is contained in:
@@ -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.
|
||||
|
||||
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 <QApplication>
|
||||
#include "window.h"
|
||||
#include "clipboard.h"
|
||||
#ifdef Q_OS_WIN
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
QApplication a(argc, argv);
|
||||
ClipboardMonitor cbm(&a);
|
||||
eApp->init();
|
||||
MainWindow w;
|
||||
w.show();
|
||||
|
||||
Reference in New Issue
Block a user