一、解决办法
最近在做一个小项目,其中有一项功能是需要获取当前剪贴板上的内容,从而帮助用户快速处理这个内容。
这个功能的方便之处在于,用户不需要在别的地方 Ctrl + C 了之后,又要点击程序里的输入框,然后再按一次 Ctrl + V。这样比较麻烦,而且用户有时候可能都点击到输入框里了,一不小心又按了一次 Ctrl + C,完蛋!又要去原来的界面去 Ctrl + C了。。。。
所以,我的想法是,在输入框的旁边放一个名为 “快速粘贴内容到此” 的按钮,只需要用户在别的地方 Ctrl + C 了之后,打开程序,然后点击这个按钮,内容就直接进输入框啦!
这个功能在Qt里实现很简单,只需要导入<QClipboard>类就可以了,但是qml里它没有。。。。然后我去网上查阅了很多资料,要不就是扯淡,要不极其复杂。
实际上qml自身就有实现办法,那就是 TextEdit 控件中自带的方法 paste() !
点进去看下具体介绍:
这句英文的意思是:用系统剪贴板的内容替换当前选定的文本。这不正是我们想要实现的嘛!
在Qt助手的文档中,通过索引我们可以看到有2个控件支持 paste() 方法。一个是 TextEdit,一个是 TextInput。
二、代码演示
下面用一段简单的代码演示一下使用方式:
import QtQuick
import QtQuick.Controls
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
TextEdit {
id: te
width: 100
height: 50
wrapMode: TextEdit.Wrap
}
Button {
x: 200
width: 100
height: 40
text: "paste"
onClicked: {
te.paste()
}
}
Button {
x: 200
y: 50
width: 100
height: 40
text: "clear"
onClicked: {
te.clear()
}
}
}
运行效果:
这里我们在左上角放了一个 TextEdit,然后右侧放了2个按钮,一个粘贴,一个清空。然后我随便复制了一些文本,接着点击右侧的 paste 按钮,文本内容就直接进 TextEdit里啦!