首页 > 其他分享 >027-第三代软件开发_ComboBox

027-第三代软件开发_ComboBox

时间:2023-10-29 13:05:59浏览次数:32  
标签:control 软件开发 color ComboBox height width 027 Text


027-第三代软件开发_ComboBox_Qt

第三代软件开发_ComboBox


文章目录

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



关键字:

Qt

Qml

ComboBox

delegate

Connections

项目介绍

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

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

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

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

重要说明☝

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

ComboBox

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


027-第三代软件开发_ComboBox_Qt_02

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
         }
     }
 }

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


027-第三代软件开发_ComboBox_Qt_03

代码在这里:

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官方的做一个比较,那就是改改颜色和图标而已。


027-第三代软件开发_ComboBox_ComboBox_04


标签:control,软件开发,color,ComboBox,height,width,027,Text
From: https://blog.51cto.com/DreamLife/8079874

相关文章

  • 20231027
    23/10/27NOIP模拟赛总结时间安排:7:40-8:30看T1,没啥思路,一开始以为是组合数,写了个递推求组合数发现是最简单的DP,测样例,手搓了几组小样例都过了。8:30-8:50T2只会模拟,写的get函数有点麻烦,耽误了一些时间。9:00-9:30看T3T4都没想到,去写T5暴力。9:30-10:20T5暴力取模的地方......
  • 20231027NOIP训练赛
    20231027NOIP训练赛时间安排7:40-9:20写T19:20-10:20写T210:20-11:10写T3T411:10-11:50写T5总结T1写挂了,T3的set超时了题解T1简单DP题T2把加转化为差分,差分数组进行区间加操作,用线段树维护T3用一个栈维护一下没有被匹配的字符即可T4结论题,答案要么删掉一个点,要......
  • 20231027
    20231027NOIP#25总结时间安排7:40~8:10看题\(A\)一眼切,\(B,C,D,E\)都不会。8:10~8:30写\(A\),但这个题坑真多。8:30~8:50写\(C\),这个好像是原题。8:50~9:50写\(B\),带些许数学的模拟,有点难写。9:50~10:35写\(E\)的前两档,但第二档做法假了。10:35~11:30反应了......
  • 潮玩蘑菇星球app软件开发系统规则
      潮玩蘑菇星球app游戏是一款迅速在全球流行的软件,我们的平台目标是打造一个富有乐趣的玩法,用户进入就会发现稀有的玩法,道具,人物。我们精心打造的一套严格的模式玩法规则,保证拥有高品质的客户体验。  1.游戏的开放性:平台坚持开放的态度,所有的用户参与加入,团队,我们都会提供......
  • 潮玩扭蛋兔有技巧的软件开发
      潮玩市场的火爆,扭蛋兔的模式加入,游戏的形象就瘦到了众多年轻人的喜好。为了迎合年轻人的想法,我们就开发一款针对潮玩扭蛋兔的游戏程序软件。  一、软件需求  在开发软件之前都是先确定软件的需求,软件的用户群体,使用场景,功能需求,为后续的开展明确方向。针对潮玩扭蛋......
  • 安卓软件开发步骤以及注意事项!
    随着智能手机的普及,安卓软件市场日益繁荣,安卓软件开发也成为了越来越多开发者的选择,本文将详细介绍安卓软件开发的步骤以及注意事项,帮助您更好地了解安卓软件开发的全过程。一、安卓软件开发步骤1、需求分析在开始安卓软件开发之前,首先需要进行充分的需求分析,这一阶段主要确定软件......
  • 027前端CMS ghost安装
    一、安装命令如下sudoadduserghostsudousermod-aGsudoghostsu-ghostcd/data/fe-doc-centercurl-o-https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh|bashnvminstallv18.17.1npmconfigsetregistryhttps://registry.npm.taobao.orgn......
  • 自己开发软件与找软件开发合作的流程!
    随着科技的不断发展,软件开发已成为当今社会不可或缺的一部分,对于许多企业和个人来说,开发一款自己的软件是实现其业务需求和提升工作效率的重要手段,然而,软件开发是一项复杂且需要专业技能的工作,因此,一些人会选择找软件开发合作来完成他们的项目。一、自己开发软件的流程1、需求分析:......
  • 软件开发技术与流程分享!
    随着科技的飞速发展,软件开发已成为当今社会不可或缺的一部分,从电子商务网站到手机应用程序,从企业管理系统到大数据分析工具,都是软件开发生命周期的产物,为了更好地了解软件开发,本文将分别从技术和流程两个方面进行详细分享。一、软件开发技术分享1、前端技术前端技术主要负责处理用......
  • 区块链技术软件开发师:打造区块链应用的专家,掌握开发实战技能
    区块链技术软件开发师:打造区块链应用的专家,掌握开发实战技能 专业技能:一、编程语言方面C/C++(必须熟悉C++语言),Golang(必须熟悉GO语言)、Python、Java、Solidity,能独立开发Chaincode熟练掌握golang的goroutine,  channel,gRPC等技术可以额外学习一些前端技术,HTML5、DIV、CSS、J......