当前位置: 首页 > article >正文

Qt Quick:CheckBox 复选框

复选框不止选中和未选中2种状态哦,它还有1种部分选中的状态。这3种状态都是Qt自带的,如果想让复选框有部分选中这个状态,需要将三态属性(tristate)设为true。

 未选中的状态值为0,部分选中是1,选中是2。

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material

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

    CheckBox {
        x: 20; width: 100; height: 50; text: "CheckBox"

        tristate: true              // 三态开启:未选中0、部分选中1、选中2

        onCheckStateChanged: {
            console.log(checkState) // 当状态改变,打印当前状态:0/1/2
        }
    }
}

自定义CheckBox需要使用indicator:

import QtQuick
import QtQuick.Controls
import QtQuick.Controls.Material

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

    CheckBox {
        id: checkBox
        x: 20
        width: 100; height: 50
        text: "CheckBox"
        font.pixelSize: 16

        tristate: true              // 三态开启:未选中0、部分选中1、选中2

        onCheckStateChanged: {
            console.log(checkState) // 当状态改变,打印当前状态:0/1/2
        }

        indicator: Item {
            width: parent.width; height: parent.height

            Image {
                id: checkboxIcon
                width: checkBox.height; height: checkBox.height
                source: switch (checkBox.checkState) {
                        case 0:
                            return "./imgs/9055251_bxs_checkbox_icon.png"
                        case 1:
                            return "./imgs/9055239_bxs_checkbox_minus_icon.png"
                        case 2:
                            return "./imgs/9055095_bxs_checkbox_checked_icon.png"
                        }
            }

            Label {
                text: checkBox.text
                font: checkBox.font

                anchors.left: checkboxIcon.right
                anchors.leftMargin: 2
                anchors.verticalCenter: checkboxIcon.verticalCenter
            }
        }
    }
}

图标就是用的Image,锯齿很明显,效果不如Material风格。还有个问题是,Label和Image之间需要留出间距,这个间距会导致Label被裁剪,右侧相同间距点击不再生效。


次日补充:

图标用Image实现时,在制作或下载图片之前就要想好尺寸了,因为我测试了一下发现,如果你的控件大小和图片大小保持一致,那么锯齿状就没那么明显了(2个尺寸差不多也可以,比如下载的图片64x64,实际显示是48x48也没问题)。

如果还是不行,可以试试抗锯齿属性设为true,或者将图片的填充模式设为自适应填充。

虽然这篇文章大概率没多少人看到,但如果真的有大神路过并且有好的建议,欢迎在评论区留言哈~


http://www.kler.cn/a/446065.html

相关文章:

  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering-简洁版
  • Vue3组件封装技巧与心得
  • day5,数据结构,单向,双向,循环链表
  • (五)FT2232HL高速调试器之--三步实现STM32的VSCODE在线仿真工程搭建
  • 三七互娱Java开发150道面试题及参考答案(下)
  • 如何去设计一个消息队列
  • 无人机+自组网+飞手:低空集群飞行技术详解
  • Angular学习路线图
  • skyler实战渗透笔记—Kioptrix-1
  • 【算法】栈
  • 配置TypeScript:tsconfig.json详解
  • Ubuntu上如何部署Nginx?
  • 中国人工智能学会技术白皮书
  • FPGA设计-使用 lspci 和 setpci 调试xilinx的PCIe 问题
  • 【libuv】Fargo信令1:client发connect消息给到server
  • 利用DnslogSqlinj工具DNSlog注入
  • 指令-v-for的key
  • 《 OpenCV 环境搭建》
  • 笔记本电脑需要一直插着电源吗?电脑一直充电的利弊介绍
  • 亚矩阵云手机
  • 使用ioredis在Node.js中操作Redis数据结构的详细指南
  • [数据结构] LRU Cache | ListMap 实现
  • JAVA队列每次添加需要新实例才能独立更新
  • 基于python+vue开发的图书借阅网站
  • windows自带16进制转10进制
  • 【数据库MySQL篇三】MySQL数据库入门基础教程:一网打尽SQL命令和语法