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

 那是自身在项目实战中的个人总计,写的仓促,某个东西也不必然标准,有个别是齐心协力推测的,还指望各位多都赐教,多多琢磨。

 关于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->setLine艾德it(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的源码,其实他的达成正是一个Line艾德it和八个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。

实质上代码量是成都百货上千的,企务能够去封装成控件,方便开辟。

    最后,假设大神们有更加好的措施,迎接商酌。

 

 

Leave a Comment.