QML之TimeEdit的实现
来源:互联网 发布:网络鸡汤到底什么意思 编辑:程序博客网 时间:2024/06/07 20:59
在使用QML设计界面的时候,用到了时间编辑框,发现QML中没有提供类似QTWidget中的QTimeEdit控件。后来没有办法就自己使用TextField和Calendar封装了一个TimeEdit组件
1、自定义编辑框TimeInput组件
时间编辑框通常都是一个输入框,前部分显示时间后面有个日历的小图标,点击可以显示日历进行选择日期。文本输入框QML中之后TextField和TextInput,但是都不符合这样的界面效果,所以这块也封装实现了一个这样的输入框。
TimeInput组件的实现:
/************************************** *文件名:TimeInput.qml ***************************************/import QtQuick 2.0import QtQml 2.2import QtQuick.Controls 1.3import QtQuick.Controls.Styles 1.3//时间编辑框组件Rectangle{ id:rect width: parent.width height: parent.height border.width: 1 border.color: "#333" /*******************************自定义属性*********************************/ property var locale: Qt.locale() property alias strTime: textEdit.text property string oldTime: "" /**********************************自定义信号*******************************/ signal clicked() /*******************************对象树*************************************/ Row{ id:row anchors.top: parent.top anchors.topMargin: 1 anchors.left: parent.left anchors.leftMargin: 1 width: children.width height: children.height spacing: 2 //文本编辑框 TextField{ id:textEdit width:rect.width-25 height:rect.height-2 style:TextFieldStyle{ background: Rectangle{ radius: 2 width: rect.width-25 height: rect.height-2 } } onEditingFinished:{ //编辑完成进行格式判断 if(rect.checkTimeFomat() === false) { textEdit.text = oldTime } else { oldTime = textEdit.text } } } //日历小图标 Image{ width: 16 height: 16 anchors.top:parent.top anchors.topMargin: 4 source: "picture/calendar.png" MouseArea{ anchors.fill: parent onClicked: { rect.clicked() mouse.accepted = false } } } } /************************************方法***********************************/ //检查输入的时间的合法性。原理就是把文本按照合法的格式解析出各个部分,再都在出日期Date, //把Date转换为string之后判断和原来的文本是否一致 function checkTimeFomat() { var strDateTimeSplit = strTime.split(" ") var strDateSplit = strDateTimeSplit[0].split("/") var strTimeSplit = strDateTimeSplit[1].split(":") var date = new Date(strDateSplit[0],strDateSplit[1]-1,strDateSplit[2],strTimeSplit[0],strTimeSplit[1],0) var strDate2 = date.toLocaleString("yyyy/M/d H:mm") console.log(strDate2) if(strDate2 !== strTime) return false else return true }}
并在这个组件中添加了对用户输入的时间格式继续合法性检查功能,如发现不合法则输入不成功,显示原本的时间,在checkTimeFomat方法中实现。当TextFiled编辑完成时进行调用
2、自定义TimeEdit组件
TimeEdit组件就是把上面实现的TimeInput组件和一个Calender(日历)组件整合实现了我们最终需要的TextEdit时间编辑组件
TextEdit组件的实现:
/************************************** *文件名:TimeEdit.qml ***************************************/import QtQuick 2.3import QtQuick.Window 2.2import QtQuick.Controls 1.3import QtQml 2.2//TimeEdit组件Rectangle { width: 100 height: 25 /**********************************自定义属性***********************************/ property alias text: textEdit.strTime //保存当前的时间文本 property date currentDate: new Date() /***********************************对象树*************************************/ //自定义的时间输入框组件 TimeInput{ id:textEdit width: parent.width height: parent.height anchors.top: parent.top anchors.left: parent.left } //日历控件 Calendar{ id:calendarItem width: 300 height: 250 anchors.top: textEdit.bottom anchors.left: textEdit.left visible: false onClicked: { visible:false } } Component.onCompleted: { //日历点击信号的信号与槽的连接 calendarItem.clicked.connect(calendarClicked) textEdit.clicked.connect(showCalendar) //初始的默认时间为当前时间 textEdit.strTime = currentDate.toLocaleDateString("yyyy/M/d")+" "+currentDate.toLocaleTimeString("H:mm") textEdit.oldTime = textEdit.strTime } /***************************************方法*******************************************/ //显示日历界面的 function showCalendar() { calendarItem.visible = !calendarItem.visible } //点击日历选择时间后的处理函数 function calendarClicked(date) { var year = date.getFullYear() var month =date.getMonth()+1 var day = date.getDate() var selectDate = year+"/"+month+"/"+day var timeSplit =textEdit.strTime.split(" ") textEdit.strTime = selectDate+" "+timeSplit[1] textEdit.oldTime = textEdit.strTime }}
这样就是实现了TextEdit组件,在外面获取当前的时间时,可直接通过text属性获取时间文本。
1 0
- QML之TimeEdit的实现
- Qml之坐标轴的实现及曲线添加
- QML 的底层实现之 JavaScript 变量编码
- qml之invokeMethod的使用
- Qml 实现一个简单的SplashScreen
- 深度解析QML的实现原理
- QML的Label实现Tooltip提示效果
- 使用Qml实现的简单键盘QmlKeyboard
- QML中sql语句的实现
- qml实现简单的时间选择控件
- QML 实现简单的翻页功能
- 基于QML的播放器实现
- qml之qmldir文件的使用
- DateEdit和TimeEdit用法
- 自学QT之QML实现响应鼠标和键盘事件
- 自学Q之qml实现qq界面动画效果
- QML 实现Slide Menu
- QML 实现圆形按钮
- GBX的Graph(最短路)
- jquery 笔记
- IOS 使用支付宝的注意事项
- nova的rpc调用机制
- 笔记
- QML之TimeEdit的实现
- Make GET request inside for loop
- Eclipse插件开发tomcat扩展
- 优秀博客地址
- HDOJ 1358.Period(KMP中next数组应用)
- 数独游戏java版(一)--核心算法
- leetcode 140: Word Break II
- js基础精华01
- Android上的resample处理