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()
    }

}
相关推荐
蒸蒸yyyyzwd8 小时前
AI应用相关可能的面试问题
笔记
叼烟扛炮8 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
蒸蒸yyyyzwd9 小时前
学习笔记 八股手撕
笔记·学习
揣一尾游鱼yu10 小时前
Spring上(IOC)笔记
java·笔记·spring·ioc
小李不想当小白12 小时前
BKP备份寄存器与RTC实时时钟(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
瑞码空间14 小时前
JSP与Servlet核心开发与CRUD实战笔记
java·笔记·servlet·jsp
La Pulga15 小时前
【FreeRTOS源码学习笔记】链表的实现
数据结构·笔记·stm32·mcu·链表·嵌入式·freertos
wuyoutrans17 小时前
以色列专利OA答复翻译,重点要避开哪些坑?
笔记
宝绿特塑业再生科技17 小时前
HDPE再生颗粒户外家具表面粉化机理与改性技术全解析
笔记·户外家具·再生塑料·塑木桌椅
凉、介18 小时前
深入理解 ARMv7-A | Generic Timer
笔记·学习·嵌入式·arm