qml 皮肤(二)使用Customizing方式

像上一篇文章qml 皮肤(一)使用系统自带的Style中那样,使用系统的style对于界面设计的不是很复杂的项目,使用起来也还行,一旦出现比较特殊的控件颜色、尺寸可以显式的设置一下,也能满足需求。就是总觉得太麻烦了。
还是需要自定义一套自己皮肤,供整个工程使用的。

查了一下Qt 的帮助文档,其中Customizing Qt Quick Controls 2 提示的方法还是不错的。

简单整理一下,就是QML Customizing 大致分三种方式:

  1. 直接显式设置:simply define it in-place,就是定义的时候自己设置,使用系统设置的style,如果没有特意设置,默认的就是Default,然后override相应的item就可以,像下面的代码中,把background覆盖了。
Button {
          id: button
          text: "A Special Button"
          background: Rectangle {
              implicitWidth: 100
              implicitHeight: 40
              color: button.down ? "#d6d6d6" : "#f6f6f6"
              border.color: "#26282a"
              border.width: 1
              radius: 4
          }
      }
  1. 自定义控件:追加一个MyButton.qml文件,帮助文档说是把$QTDIR/qml/QtQuick/Controls.2/Button.qml文件拷贝一份放到自己项目中定义为MyButton.qml,按照自己的需求去修改,具体使用时,用MyButton控件;
import QtQuick.Controls 2.1

  ApplicationWindow {
      MyButton {
          text: qsTr("A Special Button")
      }
  }
  1. 追加新的controls:命名为MyControls,其实就是追加一个新的子模块,里面放置控件的qml文件,然后使用时通过MyControls.Button来定义控件对象,好处就是不需要改文件名了,可以任意增加controls模块。
import QtQuick.Controls 2.1
import "controls" as MyControls

  ApplicationWindow {
      MyControls.Button {
          text: qsTr("A Special Button")
      }
  }

具体操作,就是把$QTDIR/qml/QtQuick/Controls.2/*.qml 拷贝到自己的项目中,并添加到自己的资源文件里。
在这里插入图片描述
注意一下,在controls目录里不要忘记qmldir文件,并添加module controls到文件里,方便查找controls模块。

module controls

这个目录里的文件就是自己的皮肤了。
我这里把radius:15 ,MY BUTTON 为MyControls.Button类型。
在这里插入图片描述

再有,官方文档的意思是,你还可以通过创建一个c++类MyStyle(具体参照帮助文档),在这个类里面追加各种属性(比如elevation),然后将MyStyle类型注册到系统中,这跟写一个qml能使用的c++类的方法是一样一样滴,我就不多说了,留意一下是qmlRegisterUncreatableType就行。

qmlRegisterUncreatableType<MyStyle>("MyStyle", 1, 0, "MyStyle", "MyStyle is an attached property");

然后,在自己的Button.qml文件中:使用control.MyStyle.elevation

import QtGraphicalEffects 1.0
import MyStyle 1.0
  // ...

  background: Rectangle {
      // ...

      layer.enabled: control.enabled && control.MyStyle.elevation > 0
      layer.effect: DropShadow {
          verticalOffset: 1
          color: control.visualFocus ? "#330066ff" : "#aaaaaa"
          samples: control.MyStyle.elevation
          spread: 0.5
      }
  }

定义时,设置MyStyle.elevation: 10

import QtQuick 2.6
import QtQuick.Controls 2.1
import MyStyle 1.0

  ApplicationWindow {
      id: window
      Row {
          spacing: 20
          anchors.centerIn: parent
          Button {
              text: "Button 2"
              MyStyle.elevation: 10
          }
      }
  }
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值