|
6Qter豆
本帖最后由 adadadda 于 2016-11-21 20:13 编辑
Control 2.0 把Control 1.*和Control.Style整合到了一起,更加轻量级,更加实用(支持Retia屏幕,定制化更加灵活),更加高效。我现在准备在整个项目中基于2.0来进行开发,目前只差TextField无法满足要求,因为Control2中不支持hover effect。见下图的control 1.*和control 2的对比。
而我又想使用hover effect,这个问题不知如何解决。首先贴出两段代码:
第一段是基于Control 1.*的- import QtQuick 2.7
- import QtQuick.Controls 1.5
- import QtQuick.Controls.Styles 1.4
- Item{
- id:item
- property bool includeZero: false
- property alias title: titl.text
- property alias text: dat.text
- property alias valueFocus: dat.focus
- property double value: Number(text)
- function selectAll(){dat.selectAll()}
- width:80+titl.contentWidth
- height:Math.max(25,titl.contentHeight)
- Text {
- id: titl
- x:0
- anchors.verticalCenter: item.verticalCenter
- }
- TextField{
- id:dat
- readonly property color color_normal: Qt.rgba(0.9412,0.9412,0.9412,1.0)
- readonly property color color_hover: Qt.rgba(0.898,0.9451,0.9843,1.0)
- readonly property color color_border: Qt.rgba(0,0.4706,0.8431,1.0)
- property color bordercolor: color_border
- anchors.left: titl.right
- anchors.verticalCenter: item.verticalCenter
- anchors.leftMargin: 5
- validator: DoubleValidator{bottom:0}
- selectByMouse:true
- style: TextFieldStyle{
- textColor: "black"
- background: Rectangle{
- radius: 4
- implicitWidth: 80
- implicitHeight: 25
- border.color: control.bordercolor
- border.width: control.focus ? 2:1
- color: control.hovered ? dat.color_hover: dat.color_normal
- }
- }
- onFocusChanged:{
- var flag
- if(focus)
- {
- selectAll()
- bordercolor=color_border
- }
- else{
- if(item.includeZero)
- flag=(text!="")
- else
- flag=(text>0)
- if(flag)
- bordercolor=color_border
- else
- bordercolor="red"
- }
- }
- }
复制代码 第二段是基于Control 2.0- import QtQuick 2.7
- import QtQuick.Controls 2.0
- Item{
- id:item
- property bool includeZero: false
- property alias title: titl.text
- property alias text: dat.text
- property alias valueFocus: dat.focus
- property double value: Number(text)
- function selectAll(){dat.selectAll()}
- width:80+titl.contentWidth
- height:Math.max(25,titl.contentHeight)
- Text {
- id: titl
- x:0
- anchors.verticalCenter: item.verticalCenter
- }
- TextField{
- id:dat
- readonly property color color_normal: Qt.rgba(0.9412,0.9412,0.9412,1.0)
- readonly property color color_hover: Qt.rgba(0.898,0.9451,0.9843,1.0)
- readonly property color color_border: Qt.rgba(0,0.4706,0.8431,1.0)
- anchors.left: titl.right
- anchors.verticalCenter: item.verticalCenter
- anchors.leftMargin: 5
- validator: DoubleValidator{bottom:0}
- selectByMouse: true
- selectionColor: color_border
- color:"black"
- background: Rectangle{
- id:bg
- radius: 4
- implicitWidth: 80
- implicitHeight: 25
- border.color: dat.color_border
- border.width: dat.focus ? 2:1
- color: dat.hovered ? dat.color_hover: dat.color_normal
- }
- onFocusChanged:{
- var flag
- if(focus)
- {
- selectAll()
- bg.border.color=color_border
- }
- else{
- if(item.includeZero)
- flag=(text!="")
- else
- flag=(text>0)
- if(flag)
- bg.border.color=color_border
- else
- bg.border.color="red"
- }
- }
- // MouseArea{
- // anchors.fill: parent
- // hoverEnabled: true
- // onClicked: parent.focus=true
- // onEntered: bg.color=parent.color_hover
- // onExited: bg.color=parent.color_normal
- // }
- }
- }
复制代码 总结几个问题:
1、control 2.0对比1.*,hovered属性不能用了,这就意味着人机交互反馈感减弱了。
2、control 2.0对比1.*,当鼠标移动到控件上时,鼠标指针不变形了。
3、control 2.0对比1.*,背景控件(第二段代码中的id为bg的控件)的属性可以在外围访问了,这是比较好的一面
我的挣扎:
我尝试着在基于control 2.0的TextField上加入MouseArea,但是无法用鼠标选择里面的数据了。限于水平我目前无法使用2.0的控件来达到1.*的使用效果,各位大神能不能帮帮我。我还是想使用2.0,满足对retia屏幕的支持。
|
最佳答案
查看完整内容
我看了一下文档,貌似的确取消了hover,然后想起了control 2主要是为了移动平台设计的,所以弱化了桌面平台的一些特性。
你可以试试在background里面加个mousearea,设置其preventStealing和propagateComposedEvents属性看看能不能截获鼠标事件又不影响textfield本身
|