Qt6 Qt Quick UI原型学习QML第三篇

这篇具有很好参考价值的文章主要介绍了Qt6 Qt Quick UI原型学习QML第三篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Qt6 Qt Quick UI原型学习QML第三篇,Qt6 高级开发工程师,qt6,c++,QML,ui

效果

Qt6 Qt Quick UI原型学习QML第三篇,Qt6 高级开发工程师,qt6,c++,QML,ui

QML代码

ClickableImage.qml文件

图像

import QtQuick 2.0

Image {
    id: root
    // 定义信号
    signal clicked

    MouseArea {
        anchors.fill: parent
        // 单击图片 触发信号
        onClicked: root.clicked()
    }
}


Image(图片)元素 解释

这段代码是使用QtQuick 2.0库来创建一个Image(图片)元素的定义。以下是代码的解释:

  • Image元素是一个用于显示图像的控件。
  • id: root是为Image元素指定了一个标识符,以便在代码中引用它。
  • signal clicked定义了一个名为clicked的信号。信号用于在特定的事件发生时通知其他代码。
  • MouseArea元素是一个用于处理鼠标事件的区域,并且该区域与父元素(即Image)的大小一致。
  • anchors.fill: parent将MouseArea元素的边界锚定在其父元素(Image)的边界上,使得区域大小与图片相同,并且当图片大小改变时,区域也会相应地改变。
  • onClicked: root.clicked()是一个信号处理器,它在鼠标单击事件发生时触发(通过MouseArea元素的onClicked属性定义)。root.clicked()是用于触发clicked信号的函数调用,通过将信号连接到其他代码,可以实现与该信号相关的自定义行为。

MyQML.qml文件

界面显示

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12


Window {
    id: window
    visible: true
    width: 1024
    height: 800
    title: qsTr("QML study")

    // 简单的图形处理
    Item {
        // 基于给定背景设置宽度
        id: item1
        width: bg.width
        height: bg.height

        Image { // 漂亮的背景图像
            id: bg
            source: "pic//4.jpg"
            width: window.width
            height: window.height
        }

        MouseArea {
            id: backgroundClicker
            //需要在图像之前,因为顺序很重要
            //否则,该鼠标区域将位于其他元素之前
            //并消耗鼠标事件
            anchors.fill: parent
            onClicked: {
                //重置我们的小场景
                circle.x = 5
                box.rotation = 0
                triangle.scale = 1.0

                all.x = (window.width - all.width)/2
                all.y = (window.height - all.height)/2
                all.rotation = 0
                all.scale = 1.0
            }
        }

        // 平移
        ClickableImage {
            id: circle
            x: 5; y: 5
            source: "pic//menu.png"
            antialiasing: true
            onClicked: {
                x += 20
            }
        }

        // 旋转 顺时针
        ClickableImage {
            id: box
            x: 5; y: circle.height + 40
            source: "pic//setting.png"
            antialiasing: true
            onClicked: {
                rotation += 15
            }
        }

        // 缩放
        ClickableImage {
            id: triangle
            x: 5; y: box.height + circle.height + 60
            source: "pic//search.png"
            antialiasing: true
            onClicked: {
                scale += 0.05
            }
        }

        // 平移 旋转 缩放
        ClickableImage {
            id: all
            x: (window.width - width)/2; y: (window.height - height)/2
            source: "pic//clock.png"
            antialiasing: true
            onClicked: {
                x  += 20
                rotation += 15
                scale += 0.05
            }
        }

        Column  {
            id: column
            spacing: 8
             x: (window.width - width)/2 + 100; y: 5

            Rectangle {
                id : red
                width: 48
                height: 48
                color: "red"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : blue
                width: 48
                height: 48
                color: "blue"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : green
                width: 48
                height: 48
                color: "green"
                border.color: Qt.lighter(color)
            }
        }

        Row  {
            id: row
            spacing: 8
             x: (window.width - width)/2 + 300; y: 5

            Rectangle {
                id : yellow
                width: 48
                height: 48
                color: "yellow"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : grey
                width: 48
                height: 48
                color: "grey"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }
        }

        Grid  {
            id: grid
            rows: 2
            columns: 2
            spacing: 8
             x: (window.width - width)/2 + 300; y: 100

            Rectangle {
                id : purple
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple1
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple2
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : purple3
                width: 48
                height: 48
                color: "purple"
                border.color: Qt.lighter(color)
            }
        }

        Flow  {
            id: flow
            spacing: 8
             x: (window.width - width)/2 + 300; y: 300

            Rectangle {
                id : black1
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black2
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black3
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }

            Rectangle {
                id : black4
                width: 48
                height: 48
                color: "black"
                border.color: Qt.lighter(color)
            }
        }

        Rectangle {
            id: root
            width: 252
            height: 252
            x: (window.width - width)/2 + 300; y: 400
            property variant colorArray: ["#00bde3", "#67c111", "#ea7025"]

            Grid{
                anchors.fill: parent
                anchors.margins: 8
                spacing: 4
                Repeater {
                    model: 16   // 16个单元格的网格
                    delegate: Rectangle {   // 代理矩形
 /*
index属性是一个整数,用于存储每个Rectangle元素的索引值。
在Repeater中,每个重复的矩形元素都有一个自己的索引值,从0开始递增。
colorIndex属性是一个整数,用于存储每个Rectangle元素的随机颜色的索引值。
在这里,使用Math.random()函数生成一个0到1之间的随机数,
然后乘以3并通过Math.floor()函数取整来获取0到2之间的随机整数作为颜色索引值。*/

                        property int index	// 可以不用
                        property int colorIndex: Math.floor(Math.random()*3)


                        width: 56; height: 56
                        color: root.colorArray[colorIndex]
                        border.color: Qt.lighter(color)

						// 小矩形文本
                        Text {
                            anchors.centerIn: parent
                            color: "#f0f0f0"
                            text: "Cell " + parent.index		// 默认0 替换为colorIndex
                        }
                    }
                }
            }
        }
    }
}

解释:Window元素、Item元素、Image元素、MouseArea元素、Column元素、Row元素、Grid元素、Flow元、Repeater元素

这段代码是一个使用QtQuick的QML(Qt Meta-Object Language)语法编写的窗口应用程序示例。以下是代码的解释:

  • import QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12是导入QtQuick和相关库的语句,用于引入相应版本的QtQuick和其附带的窗口和控件模块。

  • Window元素是一个顶层窗口元素,用于创建一个应用程序窗口。

    • id: window为窗口指定了一个标识符,以便在代码中引用它。
    • visible: true指定窗口默认为可见状态。
    • width: 1024height: 800指定了窗口的初始宽度和高度。
    • title: qsTr("QML study")设置了窗口的标题为"QML study"。
  • Item元素是一个基本的可视化元素,可以放置其他元素,并定义了一些基本的属性。

    • id: item1为Item指定了一个标识符,以便在代码中引用它。
    • width: bg.widthheight: bg.height使Item的宽度和高度与Image元素(bg)的宽度和高度相同,实现根据背景图的大小来设置Item的大小。
  • Image元素用于显示图像。

    • id: bg为Image指定了一个标识符,以便在代码中引用它。
    • source: "pic//4.jpg"指定要显示的图像文件的路径。
    • width: window.widthheight: window.height将Image的宽度和高度设置为窗口的宽度和高度,以填充整个窗口。
  • MouseArea元素用于处理鼠标事件。

    • id: backgroundClicker为MouseArea指定一个标识符,以便在代码中引用它。
    • anchors.fill: parent将MouseArea元素的边界设置为与父元素(Item)的边界相同,使得该区域可以覆盖整个父元素。
    • onClicked是一个MouseArea元素的信号,当鼠标在该区域内被单击时触发。
      • circle.x = 5box.rotation = 0triangle.scale = 1.0用于重置一些元素的位置和属性。
      • all.x = (window.width - all.width)/2all.y = (window.height - all.height)/2将all元素居中放置在窗口中心。
      • all.rotation = 0all.scale = 1.0将all元素的旋转角度和缩放比例重置为默认值。
  • ClickableImage元素是一个图像元素,用于处理鼠标点击事件,并具有一些可操作的属性。

    • xy属性指定了图像元素的初始位置。
    • source属性指定了要显示的图像文件的路径。
    • antialiasing: true开启了图像的抗锯齿效果。
    • onClicked是一个ClickableImage元素的信号,当图像元素被单击时触发。
      • x += 20使图像元素在x轴上移动20个单位。
      • rotation += 15使图像元素顺时针旋转15度。
      • scale += 0.05使图像元素的缩放比例增加0.05。
  • Column元素是一个垂直排列的布局元素,用于将子元素按列排列。

    • id: column为Column指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了列中子元素之间的垂直间距。
    • xy属性指定了Column元素的初始位置。
  • Row元素是一个水平排列的布局元素,用于将子元素按行排列。

    • id: row为Row指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了行中子元素之间的水平间距。
    • xy属性指定了Row元素的初始位置。
  • Grid元素是一个网格布局元素,可以将子元素按行和列组织成网格。

    • id: grid为Grid指定了一个标识符,以便在代码中引用它。
    • rows: 2columns: 2指定了网格的行和列数。
    • spacing: 8指定了网格中子元素之间的间距。
    • xy属性指定了Grid元素的初始位置。
  • Flow元素是一个流式布局元素,可以根据可用空间自动调整子元素的位置。

    • id: flow为Flow指定了一个标识符,以便在代码中引用它。
    • spacing: 8指定了子元素之间的间距。
    • xy属性指定了Flow元素的初始位置。
  • Rectangle元素用于创建矩形对象。

    • id属性为Rectangle指定了一个唯一的标识符。
    • widthheight属性指定了矩形的宽度和高度。
    • color属性指定了矩形的填充颜色。
    • border.color属性指定了矩形的边框颜色。
  • Repeater元素是一个重复器,用于根据模型数据重复创建子元素。

    • model: 16指定重复器的模型为一个包含16个项目的数组。
    • delegate属性指定了要重复创建的子元素的定义。
      • Rectangle元素作为子元素的代理,并定义了一些属性。
      • widthheight属性指定了子元素(矩形)的宽度和高度。
      • color属性为矩形指定了一个随机的颜色。
      • border.color属性为矩形的边框指定了一个颜色。
      • Text元素是一个子元素,用于在矩形中心显示文本。

整个代码创建了一个窗口应用程序,其中包含了图像元素、布局元素和子元素的交互逻辑。这些元素通过使用QtQuick的QML语法来定义和布局,并且可以通过信号和事件的连接来实现交互和状态的改变。
做下更改

Grid{
                anchors.fill: parent
                anchors.margins: 8
                spacing: 4
                Repeater {
                    model: 16   // 16个单元格的网格
                    delegate: Rectangle {   // 代理矩形
                        property int colorIndex: Math.floor(Math.random()*3)

                        width: 56; height: 56
                        color: root.colorArray[colorIndex]
                        border.color: Qt.lighter(color)

                        Text {
                            anchors.centerIn: parent
                            color: "#f0f0f0"
                            text: "Cell " + parent.colorIndex
                        }
                    }
                }
            }

Qt6 Qt Quick UI原型学习QML第三篇,Qt6 高级开发工程师,qt6,c++,QML,ui文章来源地址https://www.toymoban.com/news/detail-572318.html

到了这里,关于Qt6 Qt Quick UI原型学习QML第三篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt Quick程序的发布|Qt5中QML和Qt Quick 的更改

    # Quick程序的发布旧版做法 # Qt5中QML和Qt Quick 的更改 1.QML语言的更改(Qt4-Qt5)     在QML语言中,只有少量更改会影响QML代码的迁移:无法直接导入单独的文件(例如:import\\\"MyType.qml”),需要导人该文件所在的目录;     JavaScript文件中的相对路径被解析为相对于该JavaScrip

    2024年01月25日
    浏览(50)
  • 【Qt QML入门】第一个Quick应用

    运行结果: 打开Qt Creator,创建一个Qt Quick Qpplication,IDE为我们创建一个应用工程,其中包含如下文件: .pro工程文件,我们通过它来打开整个工程:  在工程文件中,通常其中的字段定义: main.qml 是Quick应用的主窗口文件,下一篇我们重点介绍QML当中的元素特性,目前只需要

    2024年02月12日
    浏览(41)
  • 【五一创作】QML、Qt Quick /Qt中绘制圆形

    有多种方法可以在 Qt Quick 中绘制圆形。以下是一些主要方法: 使用 Canvas 元素 使用 Shapes 模块: a. 使用 PathArc 和 PathLine 元素组合绘制一个完整的圆形。 b. 使用 PathEllipse 元素绘制一个椭圆形,并将其设置为圆形。 使用 Rectangle 元素绘制圆角矩形并将圆角半径设置为宽度和高

    2024年02月03日
    浏览(40)
  • C++ cmake工程引入qt6和Quick 教程

    在现代软件开发中,跨平台的图形用户界面(GUI)和可视化功能已经变得非常重要。Qt和Qt Quick(基于QML)是强大而灵活的工具,可以帮助开发者快速构建出色的应用程序。然而,当你已经有一个基于C++和CMake的工程时,将Qt和Qt Quick引入可能需要一些指导。 本教程将帮助具有

    2024年02月03日
    浏览(39)
  • 【QT教程】QT6 QML在虚拟现实中的应用

    主页  软件开发  QT6 QML框架原理与源码分析 补天云火鸟自动化创作平台 您能够创建大约3000 个短视频 一天可以轻松创建多达 100 个视频 【免费公开课 QT视频课程】您真的能免费看很多有用的QT视频! QT6_QML在虚拟现实中的应用 使用AI技术辅助生成 目录 1  QT6_QML基础回顾 1.

    2024年04月15日
    浏览(67)
  • Qt6 第一天认识基本模块、附加模块、支持的平台、QML用户界面

    Qt 5在很多年前发布,引入了一种新的声明方式来编写令人惊叹的用户界面。从那时起,我们周围的世界发生了很大的变化。 Qt 6将是Qt 5的延续,不会对大多数用户造成干扰。是什么让Qt对用户有价值? 它的跨平台特性 它的可扩展性 世界一流的API和文档 可维护性、稳定性和兼

    2024年02月13日
    浏览(51)
  • Qt Quick系列(6)—多风格UI页面

    🚀作者:CAccept 🎂专栏:Qt Quick Qt Quick控件用于创建由标准化组件(如按钮、标签、滑块等)构建的用户界面。 QtQuick.Controls:基本控件。 QtQuick.Templates:为控件提供行为化的、非可化视的基本类型。 QtQuick.Controls.Imagine:为Imagine主题风格提供支持。 QtQuick.Controls.Material:为

    2024年02月09日
    浏览(39)
  • 【HTML5高级第三篇】drag拖拽、音频视频、defer/async属性、dialog应用

    原生JavaScipt案例合集 JavaScript +DOM基础 JavaScript 基础到高级 Canvas游戏开发 1.1 拖拽事件 ondrag: 拖拽 ondragenter: 拖拽进入 ondragleave: 拖拽离开 ondragstart: 拖拽开始 ondragend: 拖拽结束 ondragover:悬浮 ondrop: 丢弃事件 该事件有一个bug,dargover事件中的默认行为阻止了ondrop事件不能够执行,

    2024年02月09日
    浏览(45)
  • Qt6之vc调用qt生成的带ui的dll

    受益于跨平台的特性,Qt生成dll的各种语言调用上体现的淋漓尽致,上篇已经演示了qt生成的无ui的dll及vc如何调用它,本篇将演示vc如何调用qt生成的带ui的dll。 传统观点认为Qt生成的带ui的dll受限于 QApplication 的 exec 方法,这样才能产生消息循环于是只能采用QTWinmigrate中重写

    2024年02月12日
    浏览(43)
  • QT6为工程添加资源文件,并在ui界面引用

    这种方式虽然添加到了工程中,但不能在UI设计界面完成引用。主要原因可能是未把文件放入到项目资源文件中,以下面一种方式可以看出区别。 选择qt resource file,点击选择, 然后通过下面的设置得到一个.qrc的资源文件, 鼠标右键这个资源文件,第一种添加的文件在qrc文件

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包