二、QML工程之初始工程代码分析

news2024/9/23 11:15:15
  1. 接着上一讲,当建立完工程之后,IDE 会呈现如下的界面

  1. 下面的代码是main.cpp,工程起始运行的代码段,具体的函数说明都在代码段里面进行了标注。

#include <QGuiApplication> //主要是ui进程运行头函数,包含事件循环,运行前初始化等
#include <QQmlApplicationEngine> //按照字面的意思是解析Qml应用程序引擎库函数 加载 解析 事件绑定等功能

int main(int argc, char *argv[])
{
    qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));//初始化虚拟键盘环境

    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);//设置高清屏幕预览自适应

    QGuiApplication app(argc, argv); //定义一个应用程序 对象

    QQmlApplicationEngine engine;    //定一个qml应用程序引擎 对象
    const QUrl url(QStringLiteral("qrc:/main.qml")); //加载qml文件
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) { //

        if (!obj && url == objUrl) //当创建qml对象失败的时候退出
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection); //connect 最后一个参数设置同步异步信号处理,具体参考https://blog.csdn.net/prefect_boy/article/details/101016393 相关文件介绍

//当发射者engine 触发objectCreated信号的时候运行lambada表达式
    engine.load(url); //在这里进行加载qml文件 当创建完成会调用objectCreated 信号,我猜了 哈哈

    return app.exec(); //线程进入循环等待 直到内部有函数终止进行函数调用
}
  1. 接下来开始讲解main.qml 这个就是界面展示的具体实现代码,如果有html css 前端基础的话很容易理解。有兴趣的话可以学习相关前端HTML 教程技术https://www.runoob.com/html/html-tutorial.html ,对后续qml的开发有很大的帮助;

  1. 前面的操作利用qml engine -〉load 这个函数 进行加载和展示main.qml 里面的内容:

QML 类似于网页设计的 HTML,是一种标记语言,我们可以借助 CSS 对它进行美化,也可以借助 JavaScript 进行交互。有 Web 开发经验的读者学习 QML 将非常轻松。

使用 QML 开发界面主要有以下几个优点:

  • QML 非常灵活,可以做出非常炫酷的效果,例如 QQ、360、迅雷等都不在话下。

  • QML 是标记语言,见名知意,非常容易编写和阅读,大大提高了开发和维护效率。

  • QML 界面简洁大气,有很多动画,适合移动端。

  • 不同平台下的 QML 使用相同的渲染机制,界面效果一致,不会随操作系统的不同而变化。

import QtQuick 2.12  //代码库的引用方式和python的方式很像 quick理解为事件处理类吧
import QtQuick.Window 2.12   //理解为控件样式类吧
import QtQuick.VirtualKeyboard 2.4

Window {  //定义主窗口
    id: window    //窗口的id
    visible: true   //是否隐藏
    width: 640    //界面的大小设置
    height: 480
    title: qsTr("Hello World")  //head 展示字体

    InputPanel { //调用虚拟键盘 刚开始可以不了解这些 后续需要使用输入事件的时候再讲
        id: inputPanel
        z: 99
        x: 0
        y: window.height
        width: window.width

        states: State {
            name: "visible"
            when: inputPanel.active
            PropertyChanges {
                target: inputPanel
                y: window.height - inputPanel.height //显示的键盘高度
            }
        }
        transitions: Transition {//transition 定义了当 State 发生变化时要应用的动画。
            from: ""
            to: "visible"
            reversible: true
            ParallelAnimation {
                NumberAnimation {
                    properties: "y"
                    duration: 250
                    easing.type: Easing.InOutQuad
                }
            }
        }
    }
}
  1. 本节内容主要讲解了main函数初始化和了解如何加载main.qml 文件,和qml简单的语法讲解。下一节就开始了真正的qml的学习了,例如 在主界面添加按钮 绑定按钮事件,初始化edit text等常用的控件。敬请期待下一节 再会!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云原生】k8s图形化管理工具之rancher

内容预知 前言 1. Rancher的相关知识 1.1 Rancher的简介 1.2 Rancher与k8s的关系及区别 1.3 Rancher具有的优势 2. Rancher的安装部署 2.1 实验环境与部署图分配 2.2 具体的部署操作 &#xff08;1&#xff09;在 rancher 节点下载 rancher 镜像 &#xff08;2&#xff…

【Spring(七)】详细了解Spring的核心容器

文章目录前言容器总结前言 前面我们完成bean以及依赖注入的相关学习&#xff0c;现在我们进入到核心容器的最后一块内容了&#xff0c;也就是与容器相关操作的学习&#x1f388;&#x1f388;。 容器 前边我们获取容器是这样获取的&#x1f447;&#x1f447;。 这只是获取容器…

Vue CLI脚手架

1、Vue的开发模式 目前我们使用vue的过程都是在html文件中&#xff0c;通过template编写自己的模板、脚本逻辑、样式等。 但是随着项目越来越复杂&#xff0c;我们会采用组件化的方式来进行开发&#xff1a; 这就意味着每个组件都会有自己的模板、脚本逻辑、样式等&#xff…

凌恩生物报告升级,科研美图助力群落互作机制研究

2022年&#xff0c;在多位技术支持与生信工程师的通力合作下凌恩生物报告升级重磅升级&#xff01;扩增子分析流程项目从60到120&#xff0c;可谓是加量不加价的超值更新了&#xff01;结题报告的结果图片可直接用于文章发表&#xff0c;快一起来看看&#xff01;小小的举个例子…

pytorch【Conv2d参数介绍】

def __init__(self,in_channels: int,out_channels: int,kernel_size: _size_2_t,stride: _size_2_t 1,padding: _size_2_t 0,dilation: _size_2_t 1,groups: int 1,bias: bool True,padding_mode: str zeros # TODO: refine this type):in_channels&#xff1a;网络输入…

《Linux性能优化实战》学习笔记 Day03

04 | 零拷贝&#xff1a;如何高效地传输文件&#xff1f; 原文摘抄 文件拷贝 上下文切换的成本并不小&#xff0c;虽然一次切换仅消耗几十纳秒到几微秒&#xff0c;但高并发服务会放大这类时间的消耗。 每周期中的 4 次内存拷贝&#xff0c;其中与物理设备相关的 2 次拷贝是…

再学C语言37:函数、数组和指针

编写一个对数组进行操作的函数&#xff0c;并进行调用 一般形式举例&#xff1a; int sum(int * arr, int n); // 函数原型// 第一个参数把数组地址和类型信息传递给函数// 第二个参数把数组中元素的个数传递给函数int main(void) {...int total;total sum(array_t, 10);...…

分分钟你也能写一个自己需要的 Chrome 扩展程序

废话 对于chrome浏览器想必大家大不陌生了&#xff0c;里面的扩展程序&#xff08;本文后面称插件&#xff09;&#xff0c;多多少少也都用过吧&#xff0c;毕竟可以辅助自己的日常工作&#xff0c;娱乐等等&#xff0c;添加完之后呢&#xff0c;就会多出一些操作按钮&#xf…

年度总结-你觉得什么叫生活?

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;&#x1f468;‍&#x1f4bb;本文简述&#xff1a;生活就像海洋,只有意志坚强的人,才能到达彼岸。&#x1f468;‍&#x1f4bb;上一篇文章…

Linux常用命令——tr命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) tr 将字符进行替换压缩和删除 补充说明 tr命令可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符&#xff0c;经常用来编写优美的单行命令&#xff0c;作用很强大。 语法 tr(选…

云逗猫——直播弹幕控制机械臂逗猫棒

这个东西思路是很简单的。简单来说在直播画面用文字跟观看者约定一些弹幕指令&#xff0c;然后用爬虫爬取直播弹幕&#xff0c;当爬到弹幕是约定的指令时&#xff0c;通过串口给舵机控制板发送信号&#xff0c;控制板控制舵机转动&#xff0c;机械臂就会做相应的动作。 猫 两…

Lesson2无头单向非循环链表(中)

1.链表 1.1链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。 1.2链表的分类 实际中链表的结构非常多样&#xff0c;以下情况组合起来就有8种链表结构&#xff1a; 1.…

【SAP Hana】X档案:SAP HANA 数据库基础知识

SAP HANA 数据库基础知识1、基本规则&#xff08;1&#xff09;注释&#xff08;2&#xff09;标识符&#xff08;3&#xff09;引号&#xff08;4&#xff09;保留字2、数据类型&#xff08;1&#xff09;日期时间类型&#xff08;2&#xff09;数字类型&#xff08;3&#xf…

SNMP简单网络管理协议

随着网络的规模越来越庞大&#xff0c;网络中的设备种类繁多&#xff0c;如何对越来越复杂的网络进行有效的管理&#xff0c;从而提供高质量的网络服务&#xff0c;已成为网络管理所面临的巨大挑战。网络的管理和运维手段多样&#xff0c;下面将对几种常见的网管与运维手段展开…

[leetcode.29]两数相除,位运算虽好,不要满眼是她

题目如下 不允许用乘除法&#xff0c;但是我们可以用加减法和位运算。。。不过这里不要用位运算&#xff0c;比如说你要是想用补码交替除法&#xff0c;你根本无法获得移动几位&#xff08;移动31位&#xff1f;太鬼畜了吧&#xff09; 所以说单纯的除法部分&#xff0c;我们可…

测试开发 | 实战演练基于加密接口测试测试用例设计

image1080594 76.4 KB 如果接口测试仅仅只是掌握一些requests或者其他一些功能强大的库的用法&#xff0c;是远远不够的&#xff0c;还需要具有根据公司的业务以及需求去定制化一个接口自动化测试框架能力。所以在这个部分&#xff0c;会主要介绍接口测试用例分析以及通用的流程…

从零开始 verilog 以太网交换机(二)MAC接收控制器的设计与实现

从零开始 verilog 以太网交换机&#xff08;二&#xff09;MAC接收控制器的设计与实现 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f9e8; 从零开始 verilog 以太网交换机系列专栏&#xff1a;点击这里 &#x1f511;未经作者允…

plt绘制点线图 点(marker)过密的解决办法

设置 markevery10 plt.plot(x, y, markero, markevery10) import matplotlib.pyplot as plt import numpy as npxnp.arange(0,2*np.pi,0.01) ynp.sin(x)fig, ax plt.subplots(constrained_layoutTrue)plt.title(markevery10)ax.plot(x, y, markero, markevery50, mfcr,mecr)…

(小甲鱼python)函数笔记合集四 函数(IV)总结 函数中参数的作用域 局部作用域 全局作用域 global语句 嵌套函数 nonlocal语句等详解

一、基础复习 函数的基本用法 创建和调用函数 函数的形参与实参等等函数的几种参数 位置参数、关键字参数、默认参数等函数的收集参数*args **args 解包参数详解 二、函数中参数的作用域 作用域&#xff1a;一个变量可以被访问的范围&#xff0c;一个变量的作用域总是由它在代…

jQuery学习-01jQuery下载安装

1 jQuery的介绍 jQuery就是js函数库&#xff0c;里面有大量的js函数库&#xff0c;使用这些函数操作dom对象&#xff0c;做事件&#xff0c;动画&#xff0c;ajax处理&#xff1b; 地址&#xff1a;https://jquery.com/ 2下载 地址&#xff1a;https://jquery.com/download/…