作者:乔山办公网日期:
返回目录:word文档
说在前边
有时候写论文,需要大量的【复制】【粘贴】操作,复制完新的却发现之前复制的还要用到,但是已经被新复制的替换掉了,还得去重新复制么?只能这样子。基于此,自己动手写了一个辅助剪切板的工具,很简单不需要太多知识,代码更简单。
选择文件,按Ctrl+V ,路径就被复制到剪切板;剪切版存在图片时,也临时做了备份保存到本地,并不断进行替换。
界面:
界面二:
显示详细:
文件备份:
代码实现
新建工程,调整界面这些就不多说了。
头文件:
class ClipBord : public QMainWindow
{
Q_OBJECT
public:
explicit ClipBord(QWidget *parent = 0);
~ClipBord();
protected slots:
void addData();
void contextMenuEvent(QContextMenuEvent *event);
void keyPressEvent(QKeyEvent *event);
void copy();
private slots:
void on_checkBox_clicked(bool checked);
void on_listWidget_currentTextChanged(const QString &currentText);
private:
Ui::ClipBord *ui;
QClipboard *b;
Text *t;
void saveData(QString data);
bool isSave;
QMenu *menu;
QAction *a;
int count;
};
获取剪切板
b=QApplication::clipboard();
判断复制到新文本就添加到列表。
为了程序的简单,只针对文本,与图片进行了保存。
void ClipBord::addData(){
if(b->mimeData()->hasText()&&isSave){
ui->listWidget->addItem(b->mimeData()->text());
saveData(b->mimeData()->text());
}
if(b->mimeData()->hasImage()&&isSave){
QImage img(b->image());
img.save("img.png");
}
}
写到文件
具体什么格式完全看自己,想怎么设置怎么设置。
void ClipBord::saveData(QString data){
if(isSave){
count++;
t->appendLine(QString("\\n<YJH:%1>\\n").arg(count)+data+QString("\\n<YJH:%1/>").arg(count));
}
}
添加右键复制操作
void ClipBord::keyPressEvent(QKeyEvent *event){
if(event->modifiers()==Qt::ControlModifier&&event->key()==Qt::Key_V){
isSave=true;
}
}
鼠标右键复制时,禁止添加到列表
void ClipBord::copy(){
isSave=false;
int c=ui->listWidget->currentRow();
if(c>-1&&c<ui->listWidget->count()){
b->setText(ui->listWidget->item(c)->text());
}else{
b->setText("");
}
按下Ctrl+V 开始记录
void ClipBord::keyPressEvent(QKeyEvent *event){
if(event->modifiers()==Qt::ControlModifier&&event->key()==Qt::Key_V){
isSave=true;
}
}
关联剪切板与添加数据槽函数
connect(b,SIGNAL(changed(QClipboard::Mode)),this,SLOT(addData()));
所有代码:
ClipBord::ClipBord(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::ClipBord)
{
ui->setupUi(this);
menu=new QMenu();
a=menu->addAction("Copy");
t=new Text("clipbord_data.txt",MODE::Read);
b=QApplication::clipboard();
on_checkBox_clicked(false);
connect(b,SIGNAL(changed(QClipboard::Mode)),this,SLOT(addData()));
isSave=true;
count=0;
t->appendLine("\\n"+QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss"));
connect(a,SIGNAL(triggered(bool)),this,SLOT(copy()));
}
ClipBord::~ClipBord()
{
delete ui;
}
void ClipBord::addData(){
if(b->mimeData()->hasText()&&isSave){
ui->listWidget->addItem(b->mimeData()->text());
saveData(b->mimeData()->text());
}
if(b->mimeData()->hasImage()&&isSave){
QImage img(b->image());
img.save("img.png");
}
}
void ClipBord::saveData(QString data){
if(isSave){
count++;
t->appendLine(QString("\\n<YJH:%1>\\n").arg(count)+data+QString("\\n<YJH:%1/>").arg(count));
}
}
void ClipBord::on_checkBox_clicked(bool checked)
{
ui->textEdit->setVisible(checked);
if(checked){
setFixedWidth(480);
}else{
setFixedWidth(160);
}
}
void ClipBord::contextMenuEvent(QContextMenuEvent *event){
int c=ui->listWidget->currentRow();
if(c>-1&&c<ui->listWidget->count()){
menu->exec(event->globalPos());
}
}
void ClipBord::keyPressEvent(QKeyEvent *event){
if(event->modifiers()==Qt::ControlModifier&&event->key()==Qt::Key_V){
isSave=true;
}
}
void ClipBord::copy(){
isSave=false;
int c=ui->listWidget->currentRow();
if(c>-1&&c<ui->listWidget->count()){
b->setText(ui->listWidget->item(c)->text());
}else{
b->setText("");
}
}
void ClipBord::on_listWidget_currentTextChanged(const QString &currentText)
{
ui->textEdit->setText(currentText);
}
到此已经结束。
说明:文章中的Text 是我自己封装的读写操作,这个很容易实现就不多做说明。
欢迎关注我。