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右边)会同时改变。
全部放在一起的效果图:
原创不易,喜欢就点个赞吧