Qt求学路1

  最近学到QML,想实现一个切换焦点,背景图片随之改变的Demo,先给出展示:

         打开QtCreator创建QML项目,在网上找三张符合主题的图片,在“资源\qml.qrc\/"目录下创建文件夹Images,把三张图片放进去,在编辑器中点右键添加已有文件,把它们加进资源列表里。

      然后新建Game.qml,Movie.qml,Music.qml文件,定义宽、高、初始颜色等一些属性,下面举Music.qml的代码为例:

import QtQuick 2.0
import "limit.js" as Logic                     //导入JS文件,后面会讲
Rectangle {
    id:music                                   //设定id值方便本文档内部调用
    width:80
    height:80
    color:focus ? "green" : "gray"            //三目元算符。聚焦时颜色为绿,不聚焦时颜色为灰
    radius:10                                 //设定圆角矩形的弧度
    scale:focus ? 1 : 0.8                     //聚焦时变大, 1 和 0.8 是比例
    focus:true                                //默认聚焦对象
    KeyNavigation.tab: movie                  //按tab键聚焦到id为movie的元素
    Text{                                     //设定文本的属性
        anchors.centerIn: parent
        font.pointSize: 12
        text:"MUSIC"
        color:"yellow"

    }

    onActiveFocusChanged: {                 //焦点改变时触发事件
        if(Logic.func()>=2){                //后面给出js文件内容,这个判断条件自行体会吧
        img.source = "Images/movie.jpg"     //改变背景图片
    }else{
            img.source = "Images/music.jpg"
        }
    }

     然后写MainForm.ui.qml文件,它的作用是添加元素到主界面,布局,也可以在这里添加事件

import QtQuick 2.5

Rectangle {
    property alias mouseArea: mouseArea       //属性别名,格式为 property alias 别名:属性名  ,用于在外文档调用
    property alias img: img
    width: 360
    height: 360

    MouseArea {                              //MouseArea元素代表鼠标点击区域,只有在此区域内才能进行鼠标事件
        id: mouseArea   
        anchors.fill: parent                  //anchors是锚,用于给元素定位布局,这句代表填充满父对象,即整个主界面都是鼠标可点击区域
    }


Movie{
id:movie                                     //每个矩形元素默认有六条锚线:left,right,top,bottom,horizontalCenter,verticalCenter
anchors.left:game.right                     //与game右锚线锚定
anchors.top:game.top                        //与game顶锚线锚定
anchors.leftMargin:40                      //左锚边距(与左边元素的距离)
}

    Image{    
        id:img
        anchors.left:parent.left
        anchors.top:parent.top
        width:640
        height:350
        source:"Images/game.jpg"                 //导入图片
        fillMode:Image.PreserveAspectCrop        //设置图片的填充模式(等比缩放)
        clip:true                                 //避免所要渲染的图片超出元素范围
}
        Music{
         id:music
        anchors.left:parent.left
        anchors.bottom:parent.bottom
        anchors.bottomMargin:25
        anchors.leftMargin:150

}
        Game{
         id:game
        anchors.left:music.right
        anchors.top:music.top
        anchors.leftMargin:40
}
    }


limit.js代码如下:

function func() {
    var count = 0 ;
    count++;
    return count;
}

最后修改一下main.qml

import QtQuick 2.5
import QtQuick.Window 2.2

Window {
    id:root
    visible: true
    width: 640
    height: 480
    title: qsTr("My desk")

    MainForm {
        anchors.fill: parent
        mouseArea.onClicked: {
            //Qt.quit();
        }
    }
}
主要是标题栏名称自定义和注释掉Qt.quit(),后者不注释的话,点击mouseArea区域就退出程序了。
第一次写,有不明白的或者有异议的欢迎提问,共同探讨。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值