快速开发QCombox以及业务样式自定义

2019-12-11 22:25栏目:操作系统
TAG:

 这是本人在等级次序实战中的个人计算,写的急促,某些东西也不必然标准,有个别是温馨猜想的,还愿意各位多多指教,多多商酌。

 关于QCombox如若无需自定义,其实写UI是很简单的。

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

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

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

上面说多少个属性函数:

m_pMicrophoneCombox->set马克斯VisibleItems(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卡塔尔(英语:State of Qatar); // 设置当前入选的目录。

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(卡塔尔(英语:State of Qatar);//用来计量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]卡塔尔(英语:State of Qatar);//给每多少个item塞进多少
pListWidget->setItemWidget(pListWidgetItem, pItem卡塔尔(英语:State of Qatar);//关于这些函数小编的了然是:在上面后生可畏层上边再覆盖黄金年代层。

接下来在QSS的体制里写hover、pressed鼠标事件,就有鼠标的相互作用。

这种措施固然实惠,可是多少不与UI抽离,都搅在一团。

精品的方案正是:

  既然QT的combox补助listwidget,那么全体都用本身定制的listwidget。

 在itemwidget里写结构,本身搞四个delegate,在代理去管理UI,数据在model里去操作,这里的model恐怕要团结包裹朝气蓬勃层,满意combox的并行供给。

pListWidget->m_pModel->Append(list[i]卡塔尔(英语:State of Qatar);//将每二个数码塞进model,剩下的多少操作就由model去处理。

新鲜注意的是:这时,qt原生的那么些接口都不见到成效了,举个例子:setcurrenttext还只怕有setcurrentindex,查看源码发掘都以依照索引来操控,而实质上,我们用本身的model

去管理的数码,并不会扭转三个目录来满意combox管理的数额,所以那个对外的接口可能也要和睦去封装出来,能够说基本上是割舍了combox,本人去组装LineEdit和ListWidget。

实在代码量是贪惏无餍的,集团事情能够去封装成控件,方便开采。

    最终,假如大神们有更加好的措施,接待争辨。

 

 

版权声明:本文由bob体育app发布于操作系统,转载请注明出处:快速开发QCombox以及业务样式自定义