027-第三代软件开发_ComboBox

news2024/10/5 18:30:15
头图

第三代软件开发_ComboBox

文章目录

  • 第三代软件开发_ComboBox
    • 项目介绍
    • ComboBox
    • 实际使用

关键字: QtQmlComboBoxdelegateConnections

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

ComboBox

今天咱接着跟着开发流程走,今天整ComboBox,老规矩,咱还是看看Qt的帮助文档对ComboBox的描述,这里还是要注意版本啊,我这里用的是Quick 2的版本

image-20230729093120975

ComboBox is a combined button and popup list. It provides a means of presenting a list of options to the user in a way that takes up the minimum amount of screen space.
ComboBox is populated with a data model. The data model is commonly a JavaScript array, a ListModel or an integer, but other types of data models are also supported.

ComboBox 是按钮和弹出列表的组合。 它提供了一种以占用最小屏幕空间的方式向用户呈现选项列表的方法。
ComboBox 填充有数据模型。 数据模型通常是 JavaScript 数组、ListModel 或整数,但也支持其他类型的数据模型。

Qt ComboBox是一个用于显示下拉列表的控件,它是Qt框架中的一部分。ComboBox提供了用户可以选择一个或多个选项的功能。用户可以通过点击下拉箭头,打开下拉列表并选择其中的一个选项。

Qt ComboBox的特点如下:

可编辑性:用户可以手动输入内容,而不仅仅是选择下拉列表提供的选项。

自动完成:当用户输入时,ComboBox可以根据已有的选项自动匹配并补全输入内容。

可自定义:用户可以自定义下拉列表中的选项,包括文本、图标和其他元素的显示。

信号槽机制:ComboBox可以触发信号来响应用户的选择,开发者可以通过连接这些信号和其他功能实现特定的逻辑。

支持多种数据类型:ComboBox不仅可以显示文本选项,还可以显示其他类型的数据,例如图像、颜色等。

实际使用

其实ComboBox使用不难,代码很简单,如下

 ComboBox {
     width: 200
     model: [ "Banana", "Apple", "Coconut" ]
 }

难点在于美工小姐姐的美化,这一个小小的控件,有很多内容需要实现,我百度了好久,发现吧百度到内容复制进去,都是没法用的,所以最终我还是研究帮助文档。我们看看帮助文档中的内容够

 import QtQuick 2.12
 import QtQuick.Controls 2.12

 ComboBox {
     id: control
     model: ["First", "Second", "Third"]

     delegate: ItemDelegate {
         width: control.width
         contentItem: Text {
             text: modelData
             color: "#21be2b"
             font: control.font
             elide: Text.ElideRight
             verticalAlignment: Text.AlignVCenter
         }
         highlighted: control.highlightedIndex === index
     }

     indicator: Canvas {
         id: canvas
         x: control.width - width - control.rightPadding
         y: control.topPadding + (control.availableHeight - height) / 2
         width: 12
         height: 8
         contextType: "2d"

         Connections {
             target: control
             function onPressedChanged() { canvas.requestPaint(); }
         }

         onPaint: {
             context.reset();
             context.moveTo(0, 0);
             context.lineTo(width, 0);
             context.lineTo(width / 2, height);
             context.closePath();
             context.fillStyle = control.pressed ? "#17a81a" : "#21be2b";
             context.fill();
         }
     }

     contentItem: Text {
         leftPadding: 0
         rightPadding: control.indicator.width + control.spacing

         text: control.displayText
         font: control.font
         color: control.pressed ? "#17a81a" : "#21be2b"
         verticalAlignment: Text.AlignVCenter
         elide: Text.ElideRight
     }

     background: Rectangle {
         implicitWidth: 120
         implicitHeight: 40
         border.color: control.pressed ? "#17a81a" : "#21be2b"
         border.width: control.visualFocus ? 2 : 1
         radius: 2
     }

     popup: Popup {
         y: control.height - 1
         width: control.width
         implicitHeight: contentItem.implicitHeight
         padding: 1

         contentItem: ListView {
             clip: true
             implicitHeight: contentHeight
             model: control.popup.visible ? control.delegateModel : null
             currentIndex: control.highlightedIndex

             ScrollIndicator.vertical: ScrollIndicator { }
         }

         background: Rectangle {
             border.color: "#21be2b"
             radius: 2
         }
     }
 }

所以,我后面就是根据这个来修改我样式的,看看我的样式如下

image-20230729093609155

代码在这里:

ComboBox
{
    id:cpmbox_userType
    anchors.top: parent.top
    font.pointSize: 14
    font.family: "Source Han Sans CN"
    width: 590
    height: 80
    model: ["管理员","用户","维护"]
    currentIndex: UserManagement.userNumber > 2 ? 1 : 0
    delegate: ItemDelegate {
        width: cpmbox_userType.width
        contentItem: Text {
            text: modelData
            color: cpmbox_userType.highlightedIndex === index ? "#
            font.pixelSize: 33
            elide: Text.ElideRight
            verticalAlignment: Text.AlignVCenter
            horizontalAlignment: Text.AlignHCenter
        }
        background: Rectangle {
            implicitWidth: 100
            implicitHeight: 40
            color: "#00000000"
        }
        highlighted: cpmbox_userType.highlightedIndex === index
    }
    background: Rectangle
    {
        color:"#00FFFFFF"
        border.width:1
        border.color:"#666666"
        radius:8
    }
    indicator: Rectangle
    {
        color:"#00FF0000"
        anchors.right:parent.right
        width:parent.height
        height:parent.height
        Image {
            width: 22
            height: 12
            anchors.centerIn: parent
            source: "qrc:/Login/T_Resource/T_Image/Login/drop_down
        }
    }
    contentItem: Text {
        anchors.left: parent.left
        anchors.leftMargin: 20
        text: parent.currentText
        color: "#FFFFFF"
        font.pixelSize: 33
        font.family: "Source Han Sans CN"
        elide: Text.ElideRight
        verticalAlignment: Text.AlignVCenter
    }
    popup: Popup {
        y: cpmbox_userType.height - 1
        width: cpmbox_userType.width
        implicitHeight: listview.contentHeight
        padding: 1
        contentItem: ListView {
            id: listview
            clip: true
            spacing: 20
            model: cpmbox_userType.popup.visible ? cpmbox_userType
            currentIndex: cpmbox_userType.highlightedIndex
        }
        background: Rectangle {
            anchors.fill: parent
            color: "#161616"
            border.color: "#36ABDE"
            border.width: 2
            radius: 8
        }
    }
}

因为我的里面有业务逻辑,所以这里咱们重点看样式部分就好了,其实如果非要和Qt官方的做一个比较,那就是改改颜色和图标而已。


博客签名2021

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

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

相关文章

试题一 (软件设计师笔记)(15分)

😀前言 现在就是总复习试题一 🏠个人主页:尘觉主页 🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉 在csdn获奖荣誉: 🏆csd…

记录打包部署Springboot项目到Windows环境

Springboot项目开发完成后要做的工作就是部署了,这里记录下打包部署的过程。这个项目是一个SpringBoot多模块项目,包含了一个父工程,一个子模块和一个工具模块。其中子模块里有启动类,而工具模块没有。因此这三者的pom文件不一样。…

SOME/IP, DDS 还是 MQTT

如今,用户希望将他们的汽车根据个人偏好进行定制,通过添加功能并定期进行更新,就像他们对待移动设备一样。实现这些期望属性的一个构建模块是基于 Internet Protocol(IP)的通信;IP为新的设计模式打开了大门…

arcgis js api 4.x加载geoserver发布的地方坐标系(自定义坐标系)的wms服务

问题描述:之前研究过arcgis js api 4.x加载arcgis server 发布的地方坐标系的wms服务,后来研究出来能正常加载了,想了解的可以看我之前的博客。但是一直困于加载geoserver发布的地方坐标系的wms服务,一直都是用的WMSLayer这个调用…

1024渗透OpenVas扫描工具使用(第十四课)

1024渗透扫描工具使用(第十四课) 一 漏洞披露 1 微软安全更新指南(自2017年2月起,替代安全公告) 安全公告都有一个惟一的编号 其命名规则是:MS年份-补丁序号 或 CVE-年份-补丁序号 比如MS17-010就表示2017年发布的编号为010的安…

自然语言处理---Transformer构建语言模型

语言模型概述 以一个符合语言规律的序列为输入,模型将利用序列间关系等特征,输出一个在所有词汇上的概率分布,这样的模型称为语言模型。 # 语言模型的训练语料一般来自于文章,对应的源文本和目标文本形如: src1 "I can do&…

【剑指Offer】34.二叉树中和为某一值的路径(二)

题目 输入一颗二叉树的根节点root和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。 1.该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2.叶子节点是指没有子节点的节点 3.路径只能从父节点到子节点,不能从…

运维:mysql常用的服务器状态命令

目录 1、查询当前服务器运行的进程 2、查询最大链接数 3、查询当前链接数 4、展示当前正在执行的sql语句 5、查询当前MySQL当中记录的慢查询条数 6、展示Mysql服务器从启动到现在持续运行的时间 7、查询数据库存储占用情况 8、查询服务器启动以来的执行查询的总次数 9…

算法通关村第十关黄金挑战——归并排序详解

大家好,我是怒码少年小码。 归并排序 就是将一个大的序列分为多个小的序列,对小的序列排序,最后利用归并的思想合并序列。归并排序的思想就是分而治之。 分:将大序列分为很多个小的序列 治:将多个小的序列合并为大序…

用 pytorch 训练端对端验证码识别神经网络并进行 C++ 移植

文章目录 前言安装安装 pytorch安装 libtorch安装 opencv(C) 准备数据集获取训练数据下载标定 编码预分析 数据集封装格式 神经网络搭建神经网络训练神经网络测试神经网络预测C 移植模型转换通过跟踪转换为 Torch Script通过注解转换为 Torch Script 编写…

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…

Python教程(15)——Python流程控制语句详解

目录 if语句else if语句for循环遍历类型range关键字 while循环break语句continue语句 Python流程控制是Python编程中非常重要的一部分&#xff0c;它用于控制程序的执行流程。Python提供了多种流程控制语句&#xff0c;包括if语句、while循环、for循环、break和continue语句等。…

[翻译]理解Postgres的IOPS:为什么数据即使都在内存,IOPS也非常重要

理解Postgres的IOPS&#xff1a;为什么数据即使都在内存&#xff0c;IOPS也非常重要 磁盘IOPS&#xff08;每秒输入/输出操作数&#xff09;是衡量磁盘系统性能的关键指标。代表每秒可以执行的读写操作数量。对于严重依赖于磁盘访问的PG来说&#xff0c;了解和优化磁盘IOPS对实…

使用QT实现http里面的get和post

#1024程序员节&#xff5c;参与投稿&#xff0c;赢限定勋章和专属大奖# #假如你有一台服务器&#xff0c;你最想做哪些事&#xff1f;# #你被什么样的BUG困扰过一周以上&#xff1f;# 在http里面下面这些方法和服务器的响应代码一起用于HTTP协议中的请求和响应交互。请注意&…

模板再认识

在前面的文章中我写了关于模板的一些简单的认识&#xff0c;现在我们来再次认识模板文章目录 1.非类型模板参数2.模板特化1). 模板特化的写法2). 类模板特化3). 函数模板特化4). 模板全/偏特化 3.模板分离编译 1.非类型模板参数 在模板中还有一种是非类型的模板参数。我们代码…

【数组拷贝+二维数组遍历】

文章目录 前言数组的拷贝第一种方式&#xff1a;第二种方式:利用工具类拷贝 二维数组二维数组的三种定义打印二维数组的某个元素遍历二维数组 二维数组的每个元素是一维数组遍历二维数组&#xff08;优化&#xff09;打印出一个数组&#xff08;不是数组元素&#xff09;的方法…

linux性能分析(三)性能优化导轮

一 别再让Linux性能问题成为你的绊脚石 ① 学习历程 备注&#xff1a; 跟我的学习经历很相像刚工作时遇到的场景跟我现在一样,深深的无力感驱使我继续前行目标: 性能优化成为我的肌肉记忆,写代码的潜意识 ... ② 常见的问题 ③ 性能问题为什么这么难呢 思考&#xff1a…

顺序表ArrayList

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 顺序表 概念Arraylist构造方法相关方法遍历操作 自…

嵌入式实时操作系统的设计与开发(任意大小的内存管理)

任意大小的内存管理是根据用户需要为其分配内存&#xff0c;即用户需要多大内存就通过acoral_malloc2()为之分配多大内存&#xff0c;同时每块分配出去的内存前面都有一个控制块&#xff0c;控制块里记录了该块内存的大小。 同时未分配出去的内存也有一个控制块&#xff0c;寻…

守护进程深度分析

思考 代码中创建的会话&#xff0c;如何关联控制终端&#xff1f; 新会话关联控制终端的方法 会话首进程成功打开终端设备 (设备打开前处于空闲状态) 1、关闭标准输入输出和标准错误输出2、将 stdin 关联到终端设备&#xff1a;STDIN_FILENO > 03、将 stdout 关联到终端设…