这是我在项目实战中的个人总结,写的仓促,有些东西也不一定准确,有些是自己推断的,还希望各位多多指教,多多评论。

关于QCombox如果不需要自定义,其实写UI是很简单的。

创建实例:QComboBox*  m_pMicrophoneCombox = new QComboBox;

我是用的QSS去的写样式,这里用了一个命名函数:m_pMicrophoneCombox->setObjectName("DeviceCombox");

如果是用的setstylesheet直接在代码里去写就好了。

下面说几个属性函数:

m_pMicrophoneCombox->setMaxVisibleItems(2);//最大可见区域为显示两条。

m_pMicrophoneCombox->setEditable(false); //设置QComboBox可编辑。

m_pMicrophoneCombox->setFocusPolicy(Qt::NoFocus);//设置QCombox没有焦点。

m_pMicrophoneCombox->setLineEdit(edit);//edit是一个lineedit,就是说QCombox的LineEdit可以自定义,而QT的源码中,顶端也是一个LineEdit。

m_pMicrophoneCombox->setCurrentIndex(0); // 设置当前选中的索引。

m_pMicrophoneCombox->setCurrentText(TR_TALK_DEVICE_COMBOX);//设置QCombox当前的显示text,我是用宏封装的,满足后期修改。

m_pMicrophoneCombox->setItemData(i, list[i]);//QCombox也可以自己传入一个链表,并且自己定义索引,当然,你想传一条数据,并且自己定义索引。

QListWidget* pListWidget = new QListWidget();//new一个widget的实例。

m_pMicrophoneCombox->setModel(pListWidget->model());//塞进widget的model。
m_pMicrophoneCombox->setView(pListWidget);//将widget装进Combox。

m_pMicrophoneCombox->count();//用来计算combox下拉窗体的大小。

m_pMicrophoneCombox->addItems(list);//插入一个列表。

m_pMicrophoneCombox->addItem("111");//插入单条数据。

以上函数基本满足业务要求,如果交互的样式比较复杂,要求自定义样式,这样的话,我们就要自己去写每一个item的样式。

分析下QCombox的源码,其实他的实现就是一个LineEdit和一个ListWidget,知道哦这个就可以自己去重新写一个ListWidget。

Item *pItem = new Item(); //item是自己自定义写的布局,每一个item的自定义样式就可以写在这个里面。
QListWidgetItem *pListWidgetItem = new QListWidgetItem(list[i],pListWidget);//我是将链表的数据塞进QCombox里。
pItem->setItemData(list[i]);//给每一个item塞进数据
pListWidget->setItemWidget(pListWidgetItem, pItem);//关于这个函数我的理解是:在底下一层上面再覆盖一层。

然后在QSS的样式里写hover、pressed鼠标事件,就有鼠标的交互。

这种办法虽然可行,但是数据不与UI分离,都搅在一团。

最佳的方案就是:

既然QT的combox支持listwidget,那么整体都用自己定制的listwidget。

在itemwidget里写布局,自己搞一个delegate,在代理去管理UI,数据在model里去操作,这里的model可能要自己封装一层,满足combox的交互要求。

pListWidget->m_pModel->Append(list[i]);//将每一个数据塞进model,剩下的数据操作就由model去管理。

特殊注意的是:这个时候,qt原生的那些接口都不生效了,例如:setcurrenttext还有setcurrentindex,查看源码发现都是根据索引来操控,而事实上,我们用自己的model

去管理的数据,并不会生成一个索引来满足combox管理的数据,所以这些对外的接口可能也要自己去封装出来,可以说基本上是放弃了combox,自己去组装LineEdit和ListWidget。

其实代码量是很多的,公司业务可以去封装成控件,方便开发。

最后,如果大神们有更好的办法,欢迎评论。

快速开发QCombox以及业务样式自定义的更多相关文章

  1. HFun.快速开发平台(五)=》自定义系统数据选择

    本篇介绍HFun.快速开发平台的另一项系统常用功能:系统数据或参数选择,主要应用在表单录入中信息的选择,如类别,编号等.先贴出本系统实现的页面效果: 如上图所示,系统中将参数的选择统一展现为该方式,开 ...

  2. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 几十套业务系统集中统一授权管理实现经验分享

    由于这几年互联网电商的快速发展,快递公司也进入了快速发展的绝好快速成长期.随着社会的强劲需求公司的业绩年年攀新高.快速发展的公司都需要有强大的IT信息系统,硬件设备基本上款到了货也可以到了,但是软件系 ...

  3. HFun.快速开发平台(二)=》自定义列表实例(请求参数的处理)

    上编描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /************************************ ...

  4. HFun.快速开发平台(四)=》自定义列表实例(请求参数的处理)

    上编自定义列表描述了自定义列表的基本实现功能,本此记录列表的请求过程. 个人比较喜欢对参数进行对象化,方便后续人维护及查看,先上代码: /******************************* ...

  5. HFun.快速开发平台(二)=》自定义列表实例

    应用系统中数据列表的展现是开发内容之一,实现的方式基本是通过编号具体的访问列表页实现,通过检索条件进行数据源的获取,列字段的描述,还可能会有检索条件的实现,列表数据的导出等功能. 为了将重复工作进行简 ...

  6. SNF快速开发平台MVC-名片管理(实际名片样式)

    名片管理实际的做的意义在于演示应用,在这里使用的技术有排序控件,查询条件.自由样式瀑布流式分页等技术. 下面是自由样式效果图: 下面表格样式效果图: 具体操作: 新增名片 在新增时可以上传图像进行裁剪 ...

  7. (转载)Android快速开发偷懒必备,一句话搞定所有ViewGroup的Adapter . 支持自定义ViewGroup

    [置顶] [Android]快速开发偷懒必备,一句话搞定所有ViewGroup的Adapter . 支持自定义ViewGroup 标签: androidAdapter快速开发0耦合 2016-12-1 ...

  8. [原创]自定义view之:快速开发一款Material Design风格的dialog的开源项目MDDialog

    随着google开始主导Material Design风格的设计,越来越多的app开始使用Material Design风格来设计自己的UI.虽然在Android Studio中集成了多种快速开发框架 ...

  9. 如何提高码农产量,基于java的web快速开发平台之自定义表单开发随笔

    老板 :下班前一定写完? 程序猿:可以,下班前能一定给! 第二天早上上班~~~ 老板:这都第二天了,怎么没写完? 程序猿:我还没有下班呢! 哎!程序猿的痛啊 公司上线的项目有不少销售记录表,又是报价单 ...

随机推荐

  1. quartz ? * 区别

    官方文档上提到问号时是这样说的: The '?' character is allowed for the day-of-month and day-of-week fields. It is use ...

  2. 使用area标签模仿a标签

    众所周知,map标签可以给img图像标记热点区域,而area标签就是跟map标签一起使用的. 但area标签的作用可不止用来标记热点,因为它也有href属性,因此某些场景可以代替a标签进行页面跳转. ...

  3. Java设计模式学习记录-原型模式

    前言 最近一直在面试,也没时间写博客了,感觉已经积攒了好多知识想要记录下来了,因为在面试中遇到的没答出来的问题,这就是自己不足的地方,然后就要去学习这部分内容,虽然说自己不足的地方学习了,但是没有应用 ...

  4. es6学习笔记10--箭头函数

    基本用法 ES6允许使用“箭头”(=>)定义函数. var f = v => v; 上面的箭头函数等同于: var f = function(v) { return v; }; 如果箭头函 ...

  5. HTML5 FileReader实现图片上传前预览

    如果你的浏览器支持Html5的FileReader的话,实现图片上传前进行预览是一件非常容易之事情. 在控制器,创建一个视图Action: jQuery代码: 实时演示一下: 下面内容于2014-11 ...

  6. RDLC报表带搜索与传参数功能演示(ASP.NET MVC)

    昨晚有演示了<ASP.NET MVC应用程序展示RDLC报表>http://www.cnblogs.com/insus/p/3665295.html RDLC报表.在实现过程中,有遇上了诸 ...

  7. Git(二)_基本命令

    0. 开始查看所有配置:git config --listgit config --global user.name "runoob"git config --global use ...

  8. VS - 未能找到与解决方案关联的源代码管理提供程序

    今天打开一个解决方案,Visual Studio出现了提示“未能找到与解决方案关联的源代码管理提供程序”,如图1所示:  图1 错误提示 单击“否”,发现解决方案已经不接受TFS的管理了. 注册表中H ...

  9. IntelliJ IDEA 2016.2 注册破解激活教程

    下载了IntelliJ IDEA 尽然需要激活,整了终于找到解决的办法了,记录下来. IntelliJ IDEA 2016.2下载地址:http://www.jetbrains.com/idea/do ...

  10. java8 集合神操作

    public class StreamUtils { private static final List<Integer> listInteger = Lists.newArrayList ...