QT之QML开发 锚点布局

news2024/12/26 21:35:41

QML中经常会用到锚点布局,本篇简单演示一下锚点布局的使用。

目录

1.锚点布局的说明

2.锚点布局三等分窗口

3.锚点布局拆分窗口

4.窗口拖动

5.完整代码


1.锚点布局的说明

2.锚点布局三等分窗口

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
// 别名必须大写,小写会报错:Invalid import qualifier ID
import './index.js' as MyJs

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Item {
           //锚点填充
           anchors.fill: parent

           Rectangle {
               id: rect1
               anchors.left: parent.left
               anchors.top: parent.top
               anchors.bottom: parent.bottom
               width: parent.width / 3
               color: "black"
           }

           Rectangle {
               id: rect2
               anchors.left: rect1.right
               anchors.top: parent.top
               anchors.bottom: parent.bottom
               width: parent.width / 3
               color: "red"
           }

           Rectangle {
               id: rect3
               anchors.left: rect2.right
               anchors.top: parent.top
               anchors.bottom: parent.bottom
               anchors.right: parent.right
               //width: parent.width / 3
               color: "yellow"
           }

       }

}

3.锚点布局拆分窗口

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
// 别名必须大写,小写会报错:Invalid import qualifier ID
import './index.js' as MyJs

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    Item {
           //锚点填充
           anchors.fill: parent

           Rectangle {
               anchors.fill: parent
               anchors.topMargin: 100
               anchors.leftMargin: 50
               id: rect1
               color: "red"

                Component.onCompleted: {
                    console.log(rect1.width, ' ', rect1.height, ' ', rect1.x, " ", rect1.y)
                }
           }

           Rectangle {
            id: rect2
            anchors.top: parent.top
            anchors.left: parent.left
            anchors.right: parent.right
            anchors.bottom: rect1.top
            color: "blue"
           }

           Rectangle {
            id: rect3
            anchors.top: rect2.bottom
            anchors.left: parent.left
            anchors.right: rect1.left
            anchors.bottom: parent.bottom
            color: "green"
           }

       }

}

4.窗口拖动

index.js

// qv4 - 只支持es5,不支持es6
function Cal(num) {
    this.Num = num

    this.add = function(data) {
        return this.Num + data
    }

    this.sub = function(data) {
        return this.Num - data
    }
}

// Math.random()*n : 生成[0, n)之间的随机数
function getRandomColor(n) {
    // 向下取整
    return Math.floor(Math.random() * n)
}

function getColorObj() {
    let red = getRandomColor(256)
    let green = getRandomColor(256)
    let blue = getRandomColor(256)
    return {red: red / 255, green: green / 255, blue: blue / 255}
}

main.qml

import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
// 别名必须大写,小写会报错:Invalid import qualifier ID
import './index.js' as MyJs

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Hello World")

    // Column是不可见元素
    Column {
        id: col1
        Button {
            text: "你好啊"

            //槽函数
            onClicked: {
                console.log("onClicked")
                console.log(add(111, 222))

                let my = new MyJs.Cal(1000)
                console.log(my.add(1))
                console.log(my.sub(1))

                rect.color = "yellow"

                let rgba = MyJs.getColorObj()
                rect.color = Qt.rgba(rgba.red, rgba.green, rgba.blue, 1.0)

            }

            function add(data1, data2) {
                return data1 + data2;
            }
        }
        Label {
            id: labl
            text: "Label"
            color: "blue"

            // 鼠标拖拽
            MouseArea {
                anchors.fill: parent
                drag.target: col1 //labl
            }
        }
    }

    // x y z布局,x y是相对于父窗口的位置
    // z=0 1 2 3 ... 越大越在上面
    Rectangle {
        id: rect
        x: col1.x
        y: col1.y + col1.height
        width: 100
        height: 100
        color: "red"

        Button {
            x: 0
            y: 0
            text: "clieck 1"
        }

        Button {
            x: 0
            y: 50
            text: "clieck 2"
        }
    }

    /*
    Rectangle {
        id: rect1
        x: parent.width - 100
        y: 0
        width: 100
        height: 100
        color: "yellow"
    }
    */

    // 锚点布局(anchor-layout) - 另一个:x y z直接定位布局
    // 任何可视化布局有x y z height width
    //

    Item {
        //锚点填充
        anchors.fill: parent

        /*
        Rectangle {
            id: rect2
            //锚定位
            // 靠右
            //anchors.right: parent.right
            // 上下左右居中
            // anchors.centerIn: parent
            // 靠左居中
            anchors.left: parent.left
            anchors.verticalCenter: parent.verticalCenter

            width: 100
            height: 100
            color: "black"
        }
        */


    }

}

5.完整代码

SimpleQml.pro

QT += quick

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
        main.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH =

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>


int main(int argc, char *argv[])
{
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif
    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

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

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

相关文章

二叉树的具体原理及实现

文章目录 一.树的专业术语二.二叉树的原理三.常见的二叉树分类1.完全二叉树2.平衡二叉树3.二叉搜索树 四.二叉搜索树算法具体实现五.二叉搜索树具体实现代码 一.树的专业术语 首先先介绍树的专业术语 二.二叉树的原理 二叉搜索树&#xff08;Binary Search Tree&#xff0c…

Java判断时间间隔来决定任务执行

数据库中的任务记录表的某条记录&#xff0c;状态一直无法变更&#xff0c;导致整个任务进程卡住&#xff0c;看了代码如下&#xff0c; 正常情况是要走到这个else里面&#xff0c;执行dockingGroup.setStatus(JobStatus.FAILED.getCode());将任务状态改为失败的 &#xff0c;查…

Windows/Linux(命令、安装包和源码安装)平台各个版本QT详细安装教程

前言 本文章主要介绍了Windows/Linux平台下&#xff0c;QT4&#xff0c;QT5&#xff0c;QT6的安装步骤。为什么要把QT版本分开介绍呢&#xff0c;因为这三个版本&#xff0c;安装步骤都不一样。Windows平台&#xff0c;QT4的Qt Creator&#xff0c;QT库和编译器是分开的&#…

【奇思妙想】【节省磁盘空间】我有一些文件,我不想移动它们,但又想节省磁盘空间,该怎么做呢?

2023年9月17日&#xff0c;周日晚上 今天晚上整理电脑的磁盘空间时&#xff0c;无意间想到了这个事情 我有一个文件夹 这个文件夹里面有很多不常用的文件 但我不想把它们移走或删除&#xff0c;那我怎么才能从中节省磁盘空间呢&#xff1f; 很简单&#xff0c;把这些不常用的…

Maven常见面试题总结

Maven简介 Maven 是一个项目管理和整合工具。Maven 包含了一个项目对象模型 (Project Object Model)&#xff0c;一组标准集合&#xff0c;一个项目生命周期管理系统(Project Lifecycle Management System)&#xff0c;一个依赖管理系统(Dependency Management System)&#x…

JavaScript中的单线程(single-threaded)和异步编程的关系

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 单线程&#xff08;Single-Threaded&#xff09;与异步编程的关系⭐ 单线程的含义⭐ 阻塞与非阻塞⭐ 异步编程⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

RK3588 点亮imx586摄像头

一.硬件原理图 mipi摄像头硬件确认点&#xff1a; 1.供电&#xff1a;5V&#xff0c;2.8V&#xff0c;1.2V&#xff0c;1.8V&#xff0c;reset脚&#xff08;硬拉3.3&#xff0c;上电的时候从低到高&#xff09;&#xff0c;pwron脚外接 3.3V。 2,时钟&#xff1a;MCLKOUT是2…

leetcode数组必刷题——二分查找、移除元素、有序数组的平方、长度最小的子数组、螺旋矩阵、螺旋矩阵 II

文章目录 二分查找移除元素有序数组的平方长度最小的子数组螺旋矩阵螺旋矩阵II 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0…

Retentive Network: A Successor to Transformer for Large Language Models

论文链接&#xff1a; https://arxiv.org/pdf/2307.08621.pdf 代码链接&#xff1a; https://github.com/microsoft/unilm/tree/master/retnet 引言 transformer的问题就是计算成本太高 RetNet使“不可能三角形”成为可能&#xff0c;同时实现了训练并行性&#xff0c;良好…

VBA技术资料MF57:VBA_自动创建PowerPoint演示文稿

【分享成果&#xff0c;随喜正能量】会因为有情绪而烦闷&#xff0c;也因为没控制情绪而懊悔。莫道幽人一事无&#xff0c;闲中尽有静工夫。情绪就像水&#xff0c;宜疏不宜堵。学会控制情绪&#xff0c;不能把情绪看得过重&#xff0c;也不能一味遏制情绪的产生。倾听所有声音…

Linux 文件创建、查看

touch、cat、more命令 ①touch命令——创建文件 ②cat命令——查看文件内容全部显示 这是txt.txt文件内容 使用cat命令查看 ③more命令——查看文件内容支持翻页 在查看的过程中&#xff0c;通过空格翻页&#xff0c;通过q退出查看

Docker搭建ELK日志采集服务及Kibana可视化图表展示

架构 ES docker network create elkmkdir -p /opt/ELK/es/datachmod 777 /opt/ELK/esdocker run -d --name elasticsearch --net elk -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -v /opt/ELK/es/plugins:/usr/share/elasticsearch/plugins -v /opt/…

电商API的应用价值:淘宝1688京东API接口系列

API接口是一种软件应用程序&#xff0c;它充当两个不同软件应用程序之间的中介。它帮助不同的应用程序相互通信&#xff0c;共享数据&#xff0c;从而使用户能够完成不同的任务。API接口的用途非常广泛&#xff0c;下面是一些常见的用途&#xff1a; 数据共享&#xff1a;API接…

vue3-vant4-vite-pinia-axios-less学习日记

代码地址 GitHub&#xff1a;vue3-vant4-vite-pinia-axios-less 效果如图 1.首页为导航栏 2.绑定英雄页 3.注册页 4.英雄列表页 5.后面不截图了&#xff0c;没啥了 模块 1.vant4&#xff1a;按需引入组件样式文档 2.安装该vite-plugin-vue-setup-extend插件可以直接在…

基于SpringBoot的电影购票系统

基于SpringBootVue的电影购票系统、影视商城管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 管理员&#xff1a;个人…

elasticsearch7-DSL查询与精准查询

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;三人行&#xff0c;必有我师焉。 本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》&#xff0c;SpringCloud…

用一个RecyclerView实现二级评论

先上个效果图&#xff08;没有UI&#xff0c;将就看吧&#xff09;&#xff0c;写代码的整个过程花了4个小时左右&#xff0c;相比当初自己开发需求已经快了很多了哈。 给产品估个两天时间&#xff0c;摸一天半的鱼不过分吧&#xff08;手动斜眼&#xff09; 需求拆分 这种大家…

Spring Authorization Server入门 (十七) Vue项目使用授权码模式对接认证服务

Vue单页面项目使用授权码模式对接流程说明 以下流程摘抄自官网 在本例中为授权代码流程。 授权码流程的步骤如下&#xff1a; 客户端通过重定向到授权端点来发起 OAuth2 请求。 如果用户未通过身份验证&#xff0c;授权服务器将重定向到登录页面。 身份验证后&#xff0c;用…

Spring Bean循环依赖学习与探究

文章目录 原理学习源码溯源 本文参考&#xff1a; 画图带你彻底弄懂三级缓存和循环依赖的问题 Spring 三级缓存解决bean循环依赖&#xff0c;为何用三级缓存而非二级_笑矣乎的博客-CSDN博客 Spring为何需要三级缓存解决循环依赖&#xff0c;而不是二级缓存&#xff1f;_石杉…

如何用在线模版快速制作活动海报?

在时代的发展和信息传播的快速发展下&#xff0c;活动海报成为了宣传活动的重要方式之一。设计一张吸引眼球的活动海报&#xff0c;不仅能够有效传递信息&#xff0c;还能够吸引人们的注意力。那么&#xff0c;在这里我将教会大家如何设计活动海报&#xff0c;只需要三分钟&…