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

}
相关推荐
Huathy-雨落江南,浮生若梦6 小时前
Caddy 学习笔记 - 反向代理与 IP 封禁
笔记·学习·tcp/ip
谢白羽7 小时前
SGLang的AWQ量化笔记
笔记·python·sglang
噜~噜~噜~7 小时前
操作系统笔记-2.3.5.2 读者-写者问题
笔记·操作系统
MindUp9 小时前
企业私有化文件管理系统选型实录:从部署架构到AI能力的技术调研笔记
人工智能·笔记·架构
GGMM7899 小时前
西门子BOP20基本操作面板超详细教程(S120/G130专用)
笔记·变频器·变频器维修
一条破秋裤10 小时前
TIM 输入捕获与 PWMI:从边沿到频率、占空比
笔记·stm32·学习
知产xiao_xin10 小时前
知识产权入门 —— 工业品外观设计
经验分享·笔记·知识产权
小猪code10 小时前
frp 80/443 Web 服务两种部署模式实操笔记
前端·笔记
熊猫钓鱼>_>11 小时前
鸿蒙AI Agent新范式:从“对话式辅助”到“工程化代理”的Harness架构实战解析
人工智能·笔记·学习·华为·架构·harmonyos
GGMM78911 小时前
西门子 AAOP 亚洲高级操作面板详解(MM420/MM440 专用)
笔记·变频器·变频器维修