027-第三代软件开发_ComboBox
  XxAHIGK5wVKO 2023年11月13日 23 0


027-第三代软件开发_ComboBox_ComboBox

第三代软件开发_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_qml_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_qml_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_qml_04


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
XxAHIGK5wVKO