赞
踩
1、基本介绍
这节主要介绍一些特殊数据的实现。设置不同类型数据的显示
如果想要区分只读和可编辑,可以设置如下两个manager,一个不绑定factory(只读),一个绑定。这样你要只读数据就用只读的manager,否则用绑定factory的manager。如下
- QtTreePropertyBrowser * m_pTreeBrowser = new QtTreePropertyBrowser(this);
- QtVariantPropertyManager *m_pManager = new QtVariantPropertyManager(m_pTreeBrowser); //绑定factory
- QtVariantPropertyManager *m_pReadonlyManager = new QtVariantPropertyManager(m_pTreeBrowser); //不绑定factory
- QtVariantEditorFactory *m_Factory = new QtVariantEditorFactory(m_pTreeBrowser);
-
- m_pTreeBrowser.setFactoryForManager(m_pManager,m_Factory); //就是这句让m_pManager创建出来的QtVariantProperty可以编辑
-
-
- //接下来创建QtVariantProperty
- //可编辑
- QtVariantProperty *pVariantProperty = m_pManager->addProperty(QVariant::String,name); //name是要自己传的,相当于key,value中的key,这样创建的是可编辑的
-
- //不编辑(只读)
- QtVariantProperty *pVariantProperty = m_pReadonlyManager->addProperty(QVariant::String,name);
(1)将double设置为QString格式输入
可以设置属性规则如下
- //创建string类型的item
- QtVariantProperty *pVariantProperty = m_pManager->addProperty(QVariant::String,"name1");
- //设置输入规则,double类型,支持科学计数法输入
- static const QString REG_DOUBLE = "^(-?\\d+)(\\.\\d+)?([eE](-?\\d+))?$";
- pVariantProperty->setAttribute("regExp",QRegExp(REG_DOUBLE));
-
- //有初始值就设置没有设为"";
- QString value = "1e-5";
- pVariantProperty->setValue(value);
-
- //之后就可以被QtTreePropertyBrowser使用了
- m_pTreeBrowser->addProperty(pVariantProperty);
如果的输入值有限制,还可以写校验,算法,就是在点击确定的时候,去检查,如果不符合你可以弹窗或者作出什么提示。
效果:
(2)QtTreePropertyBrowser设置enum类型,做成下拉框(多选一)
- //创建emun类型的item
- QtVariantProperty *pVariantProperty = m_pManager->addProperty(QtVariantPropertyManager::enumTypeId(),"name2");
- //设置列表
- 比如你需要选择的列表有:"A,B,C,D,E",,分隔符号可以是其他,比如;|等
- QString range = "A,B,C,D,E";
- QStringList enumnameslist = range.split(",");
- pVariantProperty->setAttribute("enumNames",enumnameslist);
-
- //有初始值就设置,比如value是C;
- int selectNo = -1;
- QString value = "C";
- if(enumnameslist.contains(value)) {
- selectNo = enumnameslist.indexOf(value);
- }
- pVariantProperty->setValue(selectNo);
-
- //之后就可以被QtTreePropertyBrowser使用了
- m_pTreeBrowser->addProperty(pVariantProperty);
效果:
比如你要选择其他值就点击一下值,就会弹窗如下
(3)QtTreePropertyBrowser设置flag类型(多选多、多选一都可以)
- //创建flag类型的item
- QtVariantProperty *pVariantProperty = m_pManager->addProperty(QtVariantPropertyManager::flagTypeId(),"name3");
- //设置列表
- 比如你需要选择的列表有:"AA|AB|AC|AD|AE",分隔符号可以是其他,比如,;等
- QString range = "AA|AB|AC|AD|AE";
- QStringList flaglist = range.split("|");
- pVariantProperty->setAttribute("flagNames",flaglist );
-
- //有初始值就设置,比如你选择的是AB和AD,value就是"AB|AD";
- int selectNo = -1;
- QString valuestr = "AB|AD";
- QStringList valuelist = valuestr.split("|");
- foreach(auto va,valuelist) {
- if(flaglist.contains(va)) {
- selectNo |= 0x01 << flaglist.indexOf(va);
- }
- }
-
- pVariantProperty->setValue(selectNo);
-
- //之后就可以被QtTreePropertyBrowser使用了
- m_pTreeBrowser->addProperty(pVariantProperty);
效果:
如果选择其他的,如图效果,上面的值(name3右边)会同时改变。
全部放在一起的效果图:
原创不易,喜欢就点个赞吧
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。