描述
使用安卓手机过程中接触过一个功能,比如手机通过数据线接入PC后,连续点击设置中的某个位置达到一定次数后,可以打开开发者选项。
由此可知,这是一种不对普通用户开发的功能,因此不会直接在设置中体现出来,从而通过这种方式“隐藏”这一功能。
效果
这里使用的是鼠标点击,因此看起来效果并不是很明显,可以通过下面的调试信息观察。
实现环境
Ubuntu16.04 + Qt 5.7.1(qml)
逻辑
重点主要有两个,一是计时器,二是点击次数的统计。
- 计时器使用qml中的Timer即可;
- 点击次数的统计则用某个变量进行累加;
代码实现
整个实现逻辑都在TimesAndTimerMouseArea.qml中,如下:
import QtQuick 2.0
Item {
/* 在countDownSecond秒内按钮按下targetTimes次,则timeToDo */
property int second: 5 //倒计时时间,单位为s
property int targetTimes: 5 //达到N次
function timeToDo() {} //所要处理的动作,需重载
width: 50
height: 50
QtObject {//用于存放中间变量
id: countObjdect
property int clickedTimes: 0
property int countDownSecond: second
}
Rectangle {
id: clickedArea
anchors.fill: parent
color: "#ff3e3e3e"
radius: 10
Text {
anchors.centerIn: parent
text: "我是\n按钮"
color: "#ffffffff"
font.pixelSize: 15
}
MouseArea {
anchors.fill: parent
onClicked: {
if (!countClickedTimer.running) {//若当前计时器停止,则重置倒计时
countObjdect.countDownSecond = second
countClickedTimer.start()
}
countObjdect.clickedTimes++
//当前按下次数达到目标次数并且计时器处于计时状态,则timeToDo
if (countObjdect.clickedTimes == targetTimes && countClickedTimer.running) {
console.log("Clicked times:" + countObjdect.clickedTimes)
timeToDo()
countClickedTimer.stop() //停止计时器
countObjdect.clickedTimes = 0 //清空按下次数
}
}
}
}
Timer {
id: countClickedTimer
running: false
interval: 1000 //计时器间隔,单位为ms
repeat: true //重复执行
onTriggered: {//计时器每触发一次
countObjdect.countDownSecond--
//倒计时时间到
if (countObjdect.countDownSecond <= 0) {
countClickedTimer.stop() //停下计时器
countObjdect.clickedTimes = 0 //清空按下次数
}
}
}
}
整体来说整个功能并不复杂,这里没有进行详细的控件功能的完善,只是做一个简单的demo测试。代码简单,也可从此处下载完整项目代码。
Tips:没有经过过多的测试,如有bug请谅解,欢迎反馈~