QML深入学习三(JavaScript用法)

QML之JavaScript用法

复制代码
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Qml 91 learn")
    Rectangle{
    id:containerRectid
    width:100
    height: getHeight()
    color: x>300?"lightgray":"blue"
    // anchors.centerIn: parent  //拖动就不能使用这个了,不然拖动不生效。
    //java script 函数,注意作用域。
    function getHeight(){
        console.log("width =",width)
        return width*2
    }
    }
    MouseArea{
        anchors.fill: parent
        drag.target: containerRectid
        drag.axis: Drag.XandYAxis
        drag.minimumX: 0
        drag.maximumX: parent.width - containerRectid.width
        drag.minimumY: 0
        drag.maximumY: parent.height - containerRectid.height
    }
}

调用外部的函数

复制代码
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
import "utilities.js" as Utilities  //as后首字母必须大写
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Qml 91 learn")
    Rectangle{
    id:containerRectid
    width:100
    height: 100
    color: "lightgray"
    MouseArea{
        anchors.fill: parent
        onClicked: {
            Utilities.greeting()
        }

    }
    }

}

js文件中这么写,仅仅只在当前文件有效

复制代码
//问候
function greeting() {
    console.log("greeting in utilities.js")
}

循环嵌套调用

复制代码
.import "utilities1.js" as Utilities1  //as后首字母必须大写

//问候
function greeting() {
    console.log("greeting in utilities.js")
    Utilities1.add(1+3)
}

function add(a,b) {
    console.log("method for utilities add ",a+b )
    return a+b
}

跨文件调用(已经废弃了)

复制代码
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
import "utilities.js" as Utilities  //as后首字母必须大写
Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Qml 91 learn")
    Rectangle{
    id:containerRectid
    width:100
    height: 100
    color: "lightgray"
    MouseArea{
        anchors.fill: parent
        onClicked: {
            // Utilities.add()
            console.log("ret = ",Utilities.add(1,3))
        }

    }
    }

}

// .import "utilities1.js" as Utilities1  //as后首字母必须大写
Qt.include("utilities1.js")
//问候
function greeting() {
    console.log("greeting in utilities.js")
    // Utilities1.add(1+3)
    add(1,3)
}

function add(a,b) {
    console.log("method for utilities add  = ",a+b )
    return a+b
}

JS模块

mjs文件都需要导入在资源文件中才可以使用的噢

复制代码
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
// import "utilities.js" as Utilities  //as后首字母必须大写

import "utilities1.mjs" as Utilities1 //这里只能这样,不能下面
// import * as utilities1 from "utilities1.mjs"

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Qml 91 learn")
    Rectangle{
    id:containerRectid
    width:100
    height: 100
    focus: true
    color: "lightgray"
    MouseArea{
        anchors.fill: parent
        onClicked: {
            console.log("ret = ",Utilities1.com(1,3))
            console.log("ret = ",Utilities1.diff(1,3))

        }
    }
    Keys.onPressed: function(event){
        if(event.key === Qt.Key_Q){
            console.log("press  is 0 with ctrl ");
            Qt.quit();
        }
    }
    }

}

import * as Utilities2 from "utilities2.mjs" //只能用这种方式,不能下面
// import "utilities2.mjs" as Utilities2

export function com(a,b)
{
    return Utilities2.add(a,b)
}

export function diff(a,b)
{
    return Utilities2.sub(a,b)
}


export function add(a,b) //export证明可以向外部导出,不加外部不可用
{
    return a+b
}

function sub(a,b)
{
    return a-b
}

按键退出程序

复制代码
import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Layouts 1.15
// import "utilities.js" as Utilities  //as后首字母必须大写

import "utilities1.mjs" as Utilities1 //这里只能这样,不能下面
// import * as utilities1 from "utilities1.mjs"

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Qml 91 learn")
    Rectangle{
    id:containerRectid
    width:100
    height: 100
    color: "lightgray"
    MouseArea{
        anchors.fill: parent
        focus: true
        onClicked: {
            console.log("ret = ",Utilities1.com(1,3))
            console.log("ret = ",Utilities1.diff(1,3))

        }
    }
    // Keys.onPressed: function(event){
    //     if(event.key === Qt.Key_Q){
    //         console.log("press  is 0 with ctrl ");
    //         Qt.quit();
    //     }
    // }
    }
    //Qt5的windows没有focus属性,用以下实现
    Shortcut {
        sequence: "q"
        context: Qt.ApplicationShortcut
        onActivated: Qt.quit()
    }

}
相关推荐
一轮弯弯的明月1 小时前
Spring AOP编程
java·开发语言·spring boot·笔记·spring aop·学习心得
ljt27249606611 小时前
Vue笔记(二)--组件的属性和方法
前端·vue.js·笔记
LuminousCPP1 小时前
数据结构-线性表第一篇
数据结构·经验分享·笔记·顺序表
学渣676561 小时前
AA-Clip复现笔记
笔记
東隅已逝,桑榆非晚2 小时前
深⼊理解指针(6)
c语言·笔记
risc1234562 小时前
外用抗生素(比如克林霉素、夫西地酸、红霉素)在祛痘治疗中的作用机制
笔记
晓蓝WQuiet2 小时前
《鸟哥的Linux私房菜》笔记 第七至十六章
linux·运维·笔记
ljt27249606612 小时前
Vue笔记(一)--模板
前端·vue.js·笔记
山岚的运维笔记2 小时前
Bash 专业人员笔记 -- 第 11 章:`true`、`false` 和 `:` 命令
linux·运维·服务器·开发语言·笔记·学习·bash