高效支付QCombox以及业务样式自定义

 那是作者在档次实战中的个人总计,写的急促,有个别东西也不必然标准,某个是团结猜想的,还愿意各位多多指教,多多评论。

 那是本身在品种实战中的个人总结,写的皇皇,某个东西也不必然标准,有个别是友善推断的,还愿意各位多多指教,多多评论。

 关于QCombox若是不须要自定义,其实写UI是很容易的。

 关于QCombox借使不供给自定义,其实写UI是很简短的。

开创实例:QCombo博克斯*  m_pMicrophoneCombox = new QComboBox;

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

作者是用的QSS去的写样式,那里用了八个命名函数:m_pMicrophoneCombox->setObjectName(“DeviceCombox”);

自个儿是用的QSS去的写样式,那里用了三个命名函数:m_pMicrophoneCombox->setObjectName(“DeviceCombox”);

假若是用的setstylesheet间接在代码里去写就好了。

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

上面说多少个性情函数:

上面说多少个本性函数:

m_pMicrophoneCombox->set马克斯VisibleItems(2);//最大可知区域为突显两条。

m_pMicrophoneCombox->set马克斯VisibleItems(2);//最大可知区域为体现两条。

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

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

m_pMicrophoneCombox->setFocusPolicy(Qt::NoFocus);//设置QCombox没不正常。

m_pMicrophoneCombox->setFocusPolicy(Qt::NoFocus);//设置QCombox没至极。

m_pMicrophoneCombox->setLineEdit(edit);//edit是多少个lineedit,便是说QCombox的Line艾德it可以自定义,而QT的源码中,顶端也是一个Line艾德it。

m_pMicrophoneCombox->setLine艾德it(edit);//edit是3个lineedit,就是说QCombox的Line艾德it能够自定义,而QT的源码中,顶端也是1个Line艾德it。

m_pMicrophoneCombox->setCurrentIndex(0); // 设置当前当选的目录。

m_pMicrophoneCombox->setCurrentIndex(0); // 设置当前入选的目录。

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

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

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

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

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

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

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

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

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

m_pMicrophoneCombox->count();//用来总计combox下拉窗体的高低。

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

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

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

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

以上函数基本满意工作需求,若是交互的样式相比复杂,要求自定义样式,这样的话,大家就要和谐去写每3个item的体裁。

以上函数基本满足工作供给,借使交互的样式相比较复杂,须求自定义样式,那样的话,我们就要本身去写每八个item的体裁。

解析下QCombox的源码,其实他的完成正是1个Line艾德it和3个ListWidget,知道啊那一个就足以友善去重新写多少个ListWidget。

剖析下QCombox的源码,其实他的贯彻正是贰个Line艾德it和二个ListWidget,知道啊那一个就足以本人去重新写二个ListWidget。

Item *pItem = new Item();
//item是团结自定义写的布局,每2个item的自定义样式就足以写在这一个里面。
QListWidgetItem *pListWidgetItem = new
QListWidgetItem(list[i],pListWidget);//作者是将链表的数量塞进QCombox里。
pItem->setItemData(list[i]);//给每1个item塞进多少
pListWidget->setItemWidget(pListWidgetItem,
pItem);//关于那么些函数笔者的知情是:在底下一层下面再覆盖一层。

Item *pItem = new Item();
//item是协调自定义写的布局,每2个item的自定义样式就足以写在那些里面。
QListWidgetItem *pListWidgetItem = new
QListWidgetItem(list[i],pListWidget);//作者是将链表的数码塞进QCombox里。
pItem->setItemData(list[i]);//给每2个item塞进多少
pListWidget->setItemWidget(pListWidgetItem,
pItem);//关于这么些函数笔者的知晓是:在底下一层下边再覆盖一层。

然后在QSS的体裁里写hover、pressed鼠标事件,就有鼠标的相互。

下一场在QSS的体裁里写hover、pressed鼠标事件,就有鼠标的相互。

那种艺术固然实惠,不过数量不与UI分离,都搅在一团。

那种措施就算实惠,不过数量不与UI分离,都搅在一团。

超级的方案就是:

最佳的方案就是:

  既然QT的combox支持listwidget,那么全部都用自个儿定制的listwidget。

  既然QT的combox支持listwidget,那么全体都用自个儿定制的listwidget。

 在itemwidget里写布局,本身搞八个delegate,在代理去管理UI,数据在model里去操作,那里的model大概要团结包裹一层,满意combox的并行供给。

 在itemwidget里写布局,自个儿搞贰个delegate,在代理去管理UI,数据在model里去操作,那里的model大概要协调包装一层,满意combox的并行须求。

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

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

非同一般注意的是:这一个时候,qt原生的这几个接口都不奏效了,例如:setcurrenttext还有setcurrentindex,查看源码发现都是依照索引来操控,而实际,大家用本身的model

奇异注意的是:这些时候,qt原生的这么些接口都不见效了,例如:setcurrenttext还有setcurrentindex,查看源码发现都以根据索引来操控,而实质上,大家用自身的model

去管理的数码,并不会扭转一个索引来满意combox管理的数额,所以这么些对外的接口也许也要协调去封装出来,能够说基本上是割舍了combox,本身去组装Line艾德it和ListWidget。

去管理的多少,并不会转变1个索引来知足combox管理的数据,所以那么些对外的接口只怕也要自个儿去封装出来,能够说基本上是放弃了combox,本人去组装Line艾德it和ListWidget。

实质上代码量是不少的,集团事务能够去封装成控件,方便开发。

实在代码量是无数的,公司事情能够去封装成控件,方便开发。

    最后,假使大神们有更好的艺术,欢迎评论。

    最后,假使大神们有更好的法子,欢迎评论。