Qml学习——动态加载控件

这篇具有很好参考价值的文章主要介绍了Qml学习——动态加载控件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在学习Qml,但对Qml的各种用法都不太熟悉,总是会搞忘,所以写几篇文章对学习过程中的遇到的东西做一个记录。
学习参考视频:https://www.bilibili.com/video/BV1Ay4y1W7xd?p=1&vd_source=0b527ff208c63f0b1150450fd7023fd8
其他文章:
Qml学习——动态加载控件
Qml学习——控件状态
Qml学习——使用JavaScript
Qml学习——动画
Qml学习——鼠标事件处理MouseArea
Qml学习——布局
Qml学习——基本控件


1 动态加载控件

1.1 用Component加载

Component提供了createObject方法,可以在程序运行时调用,以添加控件,它的官方例程如下。

var component = Qt.createComponent("Button.qml");
if (component.status == Component.Ready)
	component.createObject(parent, {x: 100, y: 100});

该方法需要先把加载的控件封装到一个qml文件中,然后通过createComponent加载qml文件,如果qml文件是可用的(component.status == Component.Ready),那就用createObject来创建一个实例,参数1是实例的父控件id,参数2是实例的初始属性。

1.1.1 使用方法

下面举例说明使用流程。
创建一个Rect.qml文件。
Qml学习——动态加载控件
Qml学习——动态加载控件
在Rect.qml填入以下内容,定义一个长宽为30的蓝色矩形。

import QtQuick 2.0

Rectangle { width: 30; height: 30; color: 'blue' }

在main,qml填入一下内容,用按钮来动态添加Rect控件到网格布局。

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

Window {
    visible: true; width: 200; height: 120

    GridLayout {
        id: layout
        columns: 4
    }

    Button {
        anchors.bottom: parent.bottom

        onClicked: {
            let component = Qt.createComponent("Rect.qml");
            if (component.status == Component.Ready)
                component.createObject(layout);
        }
    }
}

效果:
Qml学习——动态加载控件

1.2 用Loader加载

Qml提供的Loader类动态加载控件,以下是官方说明:

Loader可以加载QML文件(使用source属性)或Component对象(使用sourceComponent属性)。这对于将组件的创建延迟到需要时非常有用:例如,当应按需创建组件时,或者出于性能原因不应不必要地创建组件时。

它与Component加载有以下两处不一样。
1、Loader是延迟加载预先设定好的控件,并不是像Component那样可以加载任意数量的控件。
2、Loader加载的可以是Component对象或者qml文件,Component只能加载qml文件。

1.2.1 用法

加载qml文件

以上一节的Rect,qml为例。

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

Window {
    visible: true; width: 200; height: 120

    Loader { id: loader}
    Button {
        anchors.bottom: parent.bottom
        onClicked: loader.setSource("Rect.qml")
    }
}

Qml学习——动态加载控件

加载Component
import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Window {
    visible: true; width: 200; height: 120
    
    Loader { id: loader }

    Component {
        id: component
        Rect {}
    }

    Button {
        anchors.bottom: parent.bottom
        onClicked: loader.sourceComponent = component
    }
}

Qml学习——动态加载控件文章来源地址https://www.toymoban.com/news/detail-486975.html

到了这里,关于Qml学习——动态加载控件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • QML Label控件怎么把文本居中

    可以使用Label控件的horizontalAlignment属性和verticalAlignment属性来实现将文本居中显示。 示例代码: 在上述示例中,我们将Label控件的horizontalAlignment属性设置为Text.AlignHCenter,将verticalAlignment属性设置为Text.AlignVCenter,这样文本即可水平居中和垂直居中显示。

    2024年02月16日
    浏览(44)
  • QML控件和对话框之ApplicationWindows

    Application Window在 Qt Quick Controls中类似于QMain Window 在 Qt/C++中的角色,ApplicationWindow可以充当应用程序顶层窗口,具有自己的布局,包含menuBar、toolBar、statusBar等属性,可以使用平台无关的方式方便地添加菜单栏、工具栏和状态栏等项目,该类型还包含一个contentltem属性,用来进

    2023年04月22日
    浏览(38)
  • 【QML】鼠标放在控件上颜色改变的效果实现

    最近刚好要用到一个功能,在qml上实现鼠标放上去,控件的颜色改变,鼠标移走,控件颜色恢复。第一反应是这个功能非常简单,但是搞了一会儿都没实现,最后发现MouseArea其实提供了一个很简便的方法来提供使用,这里做个记录: 效果图如下:

    2024年02月12日
    浏览(55)
  • 2. QML使用View3D控件显示三维模型

    1. View3D介绍 View3D控件和QML中其它控件类似,只是在其中可以显示三维模型,类似在界面中创建一个场景,所有的模型将在这个场景中被加载出来。 效果展示: View3D三维模型加载 1.1 常用属性介绍 camera :相机(三维场景中加入相机,才能显示三维模型,控制相机的姿态进而控

    2024年02月02日
    浏览(42)
  • qml开发Android平台,加载本地html

    AndroidManifest.xml内容

    2024年01月19日
    浏览(42)
  • QML Image 通过 QQuickAsyncImageProvider 异步加载图片

    相关:QML Image 通过 QQuickImageProvider 加载图片-CSDN博客 根据 QQuickImageProvider 的文档说明,该类其实是支持在独立线程中异步加载的,但是 Async 类提供了专用于异步加载的接口,操作起来也不复杂,对于大文件或者网络文件,都可以采用异步方式加载图片。 继续 QQuickAsyncImag

    2024年01月19日
    浏览(44)
  • 9. QML_OpenGL--2. 在QQuick中搭建加载OpenGL框架

    1. 说明: OPenGL一般在 QtWidget 中使用,但目前使用 QML 做界面开发是一种趋势,同时在QML中使用OPenGL进行渲染也是十分必要,文章简单介绍如何在QML中使用 OPenGL,搭建了一种基本的框架。整体思路和在 QtWidget 中类似,只不过在 QML 中需要定义一个中间辅助类,这个类是用来注

    2024年02月12日
    浏览(34)
  • javafx各种控件

    (1)基础 RadioButton Controls经常以组的形式出现,它可以让用户进行选择。 radiobutton控件在radiobutton类中,需要导 javafx.scene.control 包。 注意,我们在RadioButton旁边显示的字符串作为参数传递给RadioButton 类的构造函数的参数。你可以选择省略字符串参数来创建一个没有文本的Ra

    2024年02月09日
    浏览(49)
  • QT各种控件常用样式表qss示例

    目录 1、表格控件QTableWidget和QTableView 2、滚动条QScrollBar 这个控件比较复杂,里面包含了滑动条、表头(又细分为内容区/空白区)、表格、整体、左上角按钮等多种不同的元素,他们之间有复杂的叠层关系。需要通过各种“选择器”来指定样式的作用范围。 本文由【暴躁的野

    2024年02月16日
    浏览(46)
  • 【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载

    【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载 单一模型: 将程序中所有功能全部实现于一个单一的源文件内部。编译时间长,不易于维护和升级不易于协作开发。 分离模型 将程序中的不同功能模块划分到不同的源文件

    2024年01月15日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包