QML学习笔记(九)QML的全局对象
前言:
在本小节中,我们将学习QML的全局对象。我们先回顾一下学基本数据类型时的代码:
property var aColor: Qt.rgba(0.2, 0.3, 0.4, 0.5)property var aRect: Qt.rect(10, 10, 10, 10)property var aPoint: Qt.point(10, 10)property var aSize: Qt.size(10, 10)
可以看到,这里多处使用了“Qt.xxx”这样的写法,但此前我们还并不清楚这个是什么。现在我可以告诉你,它就是qml当中的的全局对象。
一、查阅帮助文档
我们查阅QML Global Object,并点击Qt object进入。
它告诉我们,这是QML的一个类型,它包含一些实用函数、属性、枚举,我们可以在QML应用程序中使用它。
例如,它给出的一个例子:
Text {color: Qt.rgba(1, 0, 0, 1)text: Qt.md5("hello, world")}
我们可以使用Qt.rbga函数获取一个颜色的实例,也可以通过MD5哈希字符串来设置文本。
二、代码实践
在这里,我们将依次练习一些实践操作。
(1)新建一个QmlGlobalObject项目,并将上述代码复制过来,并添加居中和字体字号的代码。
import QtQuick 2.14
import QtQuick.Window 2.14Window {visible: truewidth: 640height: 480title: qsTr("The Qt Global Object")Text {anchors.centerIn: parentcolor: Qt.rgba(1, 0, 0, 1)text: Qt.md5("hello, world")font.pointSize: 20}
}
运行看下效果:
可以一看到,这是一串加密过的红色字符串,是文本“hello, world”的MD5加密结果,符合预期。
(2)我们在Text的下方添加一个矩形:
Rectangle{id: clickableRectIdwidth: 300height: 100color: "dodgerblue"anchors.bottom: parent.bottomMouseArea{anchors.fill: parentonClicked: {// Quit the applicationQt.quit();}}}
在点击矩形的槽函数中,使用了Qt.quit(),点击之后应用果然退出了。这下,我们掌握了如何退出应用程序的接口。
这里,我们对比一下QWidget中的方法:qApp->quit();
(3)我们尝试获取qt的字体字族列表。
先在顶部设置一个属性:
property var fonts: Qt.fontFamilies()
然后,我们在上一步的Qt.quit()后面添加代码,尝试打印出这些东西:
// Loop through the fonts
for(var i = 0; i < fonts.length; i++){console.log("[" + i + "]" + fonts[i])
}
可以看到,它能打印出310个字体字族名字,其中也包括中文的。
(4)尝试调用接口打开网址
// Open url externally
Qt.openUrlExternally("https://www.baidu.com")
果真能打开,当然,是调用浏览器的外部打开。
(5)打开文件
同理,我们也可以打开文件,包括图片和视频,但使用的是系统默认打开方式。效果图就不贴出来了,感兴趣可以尝试一下
// Open local files with the default program
Qt.openUrlExternally("file:///D:/propic/xxx.jpg")
(6)获取系统平台
我们还可以获取当前系统平台信息,是Windows、IOS,还是Linux。
// Capture plaform info
console.log("The current platform is:" + Qt.platform.os)
(7)属性绑定
上一节中,我们使用过这个东西,再回顾一下吧!
redRectId.height = Qt.binding(function(){return redRectId.width * 0.5})
三、总结
总之,Qt.这个全局对象可以帮我们做很多事情,不管是设置属性、获取信息,还是帮我们做一些打开操作,它都能轻松实现。
你可能困扰,怎么可能全部记住这些功能和接口?那自然是不可能的,但我们可以查阅帮助文档,尽可能了解Qt.全局对象的功能。并且实际开发的时候,我们一定是遇到问题,再去解决问题。现阶段,只要对它有一个初步认知,并且未来遇到某个问题,能下意识知道该使用Qt.全局变量即可。