找回密码
 立即注册
收起左侧

TextField从Control 1.5到Control 2.0的若干问题

2
回复
7546
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2016-11-21 10:33:16 显示全部楼层 |阅读模式
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.*的
  1. import QtQuick 2.7
  2. import QtQuick.Controls 1.5
  3. import QtQuick.Controls.Styles 1.4

  4. Item{
  5.     id:item
  6.     property bool includeZero: false
  7.     property alias title: titl.text
  8.     property alias text: dat.text
  9.     property alias valueFocus: dat.focus
  10.     property double value: Number(text)
  11.     function selectAll(){dat.selectAll()}

  12.     width:80+titl.contentWidth
  13.     height:Math.max(25,titl.contentHeight)

  14.     Text {
  15.         id: titl
  16.         x:0
  17.         anchors.verticalCenter: item.verticalCenter
  18.     }

  19.     TextField{
  20.         id:dat
  21.         readonly property color color_normal:  Qt.rgba(0.9412,0.9412,0.9412,1.0)
  22.         readonly property color color_hover: Qt.rgba(0.898,0.9451,0.9843,1.0)
  23.         readonly property color color_border: Qt.rgba(0,0.4706,0.8431,1.0)
  24.         property color bordercolor: color_border

  25.         anchors.left: titl.right
  26.         anchors.verticalCenter: item.verticalCenter
  27.         anchors.leftMargin: 5
  28.         validator: DoubleValidator{bottom:0}
  29.         selectByMouse:true

  30.         style: TextFieldStyle{
  31.             textColor: "black"
  32.             background: Rectangle{
  33.                 radius: 4
  34.                 implicitWidth: 80
  35.                 implicitHeight: 25
  36.                 border.color:  control.bordercolor
  37.                 border.width: control.focus ? 2:1
  38.                 color: control.hovered ? dat.color_hover: dat.color_normal
  39.             }
  40.         }

  41.         onFocusChanged:{
  42.             var flag
  43.             if(focus)
  44.             {
  45.                 selectAll()
  46.                 bordercolor=color_border
  47.             }
  48.             else{
  49.                 if(item.includeZero)
  50.                     flag=(text!="")
  51.                 else
  52.                     flag=(text>0)
  53.                 if(flag)
  54.                     bordercolor=color_border
  55.                 else
  56.                     bordercolor="red"
  57.             }
  58.         }
  59.     }
复制代码
第二段是基于Control 2.0
  1. import QtQuick 2.7
  2. import QtQuick.Controls 2.0

  3. Item{
  4.     id:item
  5.     property bool includeZero: false
  6.     property alias title: titl.text
  7.     property alias text: dat.text
  8.     property alias valueFocus: dat.focus
  9.     property double value: Number(text)
  10.     function selectAll(){dat.selectAll()}


  11.     width:80+titl.contentWidth
  12.     height:Math.max(25,titl.contentHeight)

  13.     Text {
  14.         id: titl
  15.         x:0
  16.         anchors.verticalCenter: item.verticalCenter
  17.     }

  18.     TextField{
  19.         id:dat
  20.         readonly property color color_normal:  Qt.rgba(0.9412,0.9412,0.9412,1.0)
  21.         readonly property color color_hover: Qt.rgba(0.898,0.9451,0.9843,1.0)
  22.         readonly property color color_border: Qt.rgba(0,0.4706,0.8431,1.0)

  23.         anchors.left: titl.right
  24.         anchors.verticalCenter: item.verticalCenter
  25.         anchors.leftMargin: 5
  26.         validator: DoubleValidator{bottom:0}
  27.         selectByMouse: true
  28.         selectionColor: color_border
  29.         color:"black"

  30.         background: Rectangle{
  31.             id:bg
  32.             radius: 4
  33.             implicitWidth: 80
  34.             implicitHeight: 25
  35.             border.color:  dat.color_border
  36.             border.width: dat.focus ? 2:1
  37.             color: dat.hovered ? dat.color_hover: dat.color_normal
  38.         }

  39.         onFocusChanged:{
  40.             var flag
  41.             if(focus)
  42.             {
  43.                 selectAll()
  44.                 bg.border.color=color_border
  45.             }
  46.             else{
  47.                 if(item.includeZero)
  48.                     flag=(text!="")
  49.                 else
  50.                     flag=(text>0)
  51.                 if(flag)
  52.                     bg.border.color=color_border
  53.                 else
  54.                     bg.border.color="red"
  55.             }
  56.         }

  57. //        MouseArea{
  58. //            anchors.fill: parent
  59. //            hoverEnabled: true
  60. //            onClicked: parent.focus=true
  61. //            onEntered: bg.color=parent.color_hover
  62. //            onExited: bg.color=parent.color_normal
  63. //        }
  64.     }
  65. }
复制代码
总结几个问题:
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本身
回复

使用道具 举报

尚未签到

2016-11-21 10:33:17 显示全部楼层
我看了一下文档,貌似的确取消了hover,然后想起了control 2主要是为了移动平台设计的,所以弱化了桌面平台的一些特性。

你可以试试在background里面加个mousearea,设置其preventStealing和propagateComposedEvents属性看看能不能截获鼠标事件又不影响textfield本身
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2016-11-22 23:09:39 显示全部楼层
Joey_Chan 发表于 2016-11-22 22:40
我看了一下文档,貌似的确取消了hover,然后想起了control 2主要是为了移动平台设计的,所以弱化了桌面平台 ...

谢谢,我在试试。万分感谢。。。。。。。。。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了