Qt 剪贴板历史记录,以系统托盘形式运行,记录剪贴板数据变化,保存剪贴板历史记录为文本。
clipboard_history.cpp
#include <QApplication>
#include <QMenu>
#include <QAction>
#include <QDateTime>
#include <QFile>
#include <QTextStream>
#include <QClipboard>
#include <QMimeData>
#include <QUrl>
#include <QDesktopServices>
#include "clipboard_history.h"
ClipboardHistory::ClipboardHistory() : QSystemTrayIcon()
{
setIcon(QIcon(":/clipboard.png"));
setToolTip(tr("剪贴板历史记录"));
createContextMenu();
connect(QApplication::clipboard(), SIGNAL(dataChanged()), this, SLOT(clipboardChange()));
}
void ClipboardHistory::clipboardChange()
{
QString txt = QApplication::clipboard()->mimeData()->text();
if (txt.isEmpty())
{
if (QApplication::clipboard()->mimeData()->hasUrls())
{
QList<QUrl> lst = QApplication::clipboard()->mimeData()->urls();
foreach (QUrl url, lst)
{
txt += url.toString();
txt += "\r\n";
}
}
}
QFile file(tr("clipboard_history_%1.txt").arg(QDateTime::currentDateTime().toString("yyyy_MM_dd_hh")));
file.open(QIODevice::Append | QIODevice::Text);
QTextStream out(&file);
out << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss") << endl;
out << txt << endl << endl;
}
void ClipboardHistory::openDir()
{
QDesktopServices::openUrl(QApplication::applicationDirPath());
}
void ClipboardHistory::createContextMenu()
{
mMenu = new QMenu;
mMenu->addAction(tr("打开文件夹"), this, SLOT(openDir()));
mMenu->addAction(QIcon(":/exit.png"), tr("退出"), qApp, SLOT(quit()));
setContextMenu(mMenu);
}