# qt_cascader **Repository Path**: zjlanhe/qt_cascader ## Basic Information - **Project Name**: qt_cascader - **Description**: qt实现的级联选择器 - **Primary Language**: C++ - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-09-01 - **Last Updated**: 2022-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 级联选择器-Cascader # 介绍 qt实现的级联选择器 # 效果 ![Cascader_demo](https://static.pigudaxiang.cn/articles/722affcf7aaa1df8fbca486094fcae84.gif) [效果演示](https://pigudaxiang.cn/articles/79) # 使用 > gitee的MainWindow有demo ## 创建 级联选择器的创建必须`基于一个QWidget`,否则会引发一系列错误! ```cpp Cascader* cas = new Cascader(QWidget*); ``` ## 设置大小 可以通过`ResetSize`函数重设大小,但宽高不得小于最小宽高。最小宽高的定义位于Cascader里面的`m_nMinimumWidth`和`m_nMinimumHeight` ```cpp cas->ResetSize(300, 60); ``` ## 显示形式 内容的显示形式有两种: - 显示所有层级 ```cpp cas->SetContentStyle(Cascader::CascaderContentStyle::AllLevels); ``` ![image.png](https://static.pigudaxiang.cn/articles/723b0a3ddb5ef195dbc81f339cb1ad7b.png) - 只显示最后一级 ```cpp cas->SetContentStyle(Cascader::CascaderContentStyle::LastLevel); ``` ![image.png](https://static.pigudaxiang.cn/articles/13d1e0cbb47a88ca312d036b0a94012e.png) ## 数据导入 目前只支持`json`形式导入,可以通过`Update`函数更新内容。 ```cpp bool ret = cas->Update(strJson); if(ret) { // 成功 } else { // 失败 } ``` ## Json字符串格式 > 源码下有test.json文件,可以直接读取使用 ```json [{ "label": "四大发明", "value": "inventions", "children": [{ "label": "指南针", "value": "1" }, { "label": "造纸术", "value": "2" }, { "label": "火药", "value": "3" }, { "label": "活字印刷术", "value": "4" }] }, { "label": "五大银行", "value": "banks", "children":[{ "label": "中国工商银行", "value": "0", "children": [{ "label": "员工1", "value": "1", "disabled": true }, { "label": "员工2", "value": "2", "children": [{ "label": "老婆", "value": "laopo" }, { "label": "儿子", "value": "erzi" }] }] }, { "label": "中国建设银行", "value": "1" }, { "label": "中国农业银行", "value": "2" }, { "label": "中国银行", "value": "3" }, { "label": "中国交通银行", "value": "4" }] }, { "label": "单一选项", "value": "00" }] ```   其中`label`和`value`字段是必要的,分别对应显示的内容和其要表示的值。如果没有这两个字段,那么数据导入必定失败。   `children`代表当前label项下的子项。   `disabled`字段可有可无,且类型是bool,当某个项的`disabled`值为true时,该项禁用。 ## 结果获取   Cascader在当前选项变化后,会发出`CurrentItemChanged`信号,原型如下: ```cpp signals: void CurrentItemChanged(QString content, QVariant value); ```   其中`content`代表当前显示的内容字符串,`value`代表最后一个层级的value值。 # 注意点 - Debug下,该项目有我自己的打印信息,不需要的可以查找下`qDebug`字样,然后删除。 - 不要输入超大量数据,否则显示可能有点问题。