当前位置:   article > 正文

QtTreePropertyBrowser使用大全

QtTreePropertyBrowser使用大全

1、基本介绍

qtTreePropertyBrowser的基本介绍可以参考如下文章(25条消息) Qt属性表控件的使用 QtTreePropertyBrowser_尘中远的博客-CSDN博客_qtpropertybrowserhttps://blog.csdn.net/czyt1988/article/details/42423613?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164861102616780271967105%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164861102616780271967105&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-5-42423613.142%5Ev5%5Epc_search_result_cache,143%5Ev6%5Econtrol&utm_term=qtvariantproperty&spm=1018.2226.3001.41872、进阶

这节主要介绍一些特殊数据的实现。设置不同类型数据的显示

如果想要区分只读和可编辑,可以设置如下两个manager,一个不绑定factory(只读),一个绑定。这样你要只读数据就用只读的manager,否则用绑定factory的manager。如下

  1. QtTreePropertyBrowser * m_pTreeBrowser = new QtTreePropertyBrowser(this);
  2. QtVariantPropertyManager *m_pManager = new QtVariantPropertyManager(m_pTreeBrowser); //绑定factory
  3. QtVariantPropertyManager *m_pReadonlyManager = new QtVariantPropertyManager(m_pTreeBrowser); //不绑定factory
  4. QtVariantEditorFactory *m_Factory = new QtVariantEditorFactory(m_pTreeBrowser);
  5. m_pTreeBrowser.setFactoryForManager(m_pManager,m_Factory); //就是这句让m_pManager创建出来的QtVariantProperty可以编辑
  6. //接下来创建QtVariantProperty
  7. //可编辑
  8. QtVariantProperty *pVariantProperty = m_pManager->addProperty(QVariant::String,name); //name是要自己传的,相当于keyvalue中的key,这样创建的是可编辑的
  9. //不编辑(只读)
  10. QtVariantProperty *pVariantProperty = m_pReadonlyManager->addProperty(QVariant::String,name);

(1)将double设置为QString格式输入

可以设置属性规则如下

  1. //创建string类型的item
  2. QtVariantProperty *pVariantProperty = m_pManager->addProperty(QVariant::String,"name1");
  3. //设置输入规则,double类型,支持科学计数法输入
  4. static const QString REG_DOUBLE = "^(-?\\d+)(\\.\\d+)?([eE](-?\\d+))?$";
  5. pVariantProperty->setAttribute("regExp",QRegExp(REG_DOUBLE));
  6. //有初始值就设置没有设为"";
  7. QString value = "1e-5";
  8. pVariantProperty->setValue(value);
  9. //之后就可以被QtTreePropertyBrowser使用了
  10. m_pTreeBrowser->addProperty(pVariantProperty);

如果的输入值有限制,还可以写校验,算法,就是在点击确定的时候,去检查,如果不符合你可以弹窗或者作出什么提示。

效果:

(2)QtTreePropertyBrowser设置enum类型,做成下拉框(多选一)

  1. //创建emun类型的item
  2. QtVariantProperty *pVariantProperty = m_pManager->addProperty(QtVariantPropertyManager::enumTypeId(),"name2");
  3. //设置列表
  4. 比如你需要选择的列表有:"A,B,C,D,E",,分隔符号可以是其他,比如;|等
  5. QString range = "A,B,C,D,E";
  6. QStringList enumnameslist = range.split(",");
  7. pVariantProperty->setAttribute("enumNames",enumnameslist);
  8. //有初始值就设置,比如value是C;
  9. int selectNo = -1;
  10. QString value = "C";
  11. if(enumnameslist.contains(value)) {
  12. selectNo = enumnameslist.indexOf(value);
  13. }
  14. pVariantProperty->setValue(selectNo);
  15. //之后就可以被QtTreePropertyBrowser使用了
  16. m_pTreeBrowser->addProperty(pVariantProperty);

效果:

 比如你要选择其他值就点击一下值,就会弹窗如下

(3)QtTreePropertyBrowser设置flag类型(多选多、多选一都可以)

  1. //创建flag类型的item
  2. QtVariantProperty *pVariantProperty = m_pManager->addProperty(QtVariantPropertyManager::flagTypeId(),"name3");
  3. //设置列表
  4. 比如你需要选择的列表有:"AA|AB|AC|AD|AE",分隔符号可以是其他,比如,;等
  5. QString range = "AA|AB|AC|AD|AE";
  6. QStringList flaglist = range.split("|");
  7. pVariantProperty->setAttribute("flagNames",flaglist );
  8. //有初始值就设置,比如你选择的是AB和AD,value就是"AB|AD";
  9. int selectNo = -1;
  10. QString valuestr = "AB|AD";
  11. QStringList valuelist = valuestr.split("|");
  12. foreach(auto va,valuelist) {
  13. if(flaglist.contains(va)) {
  14. selectNo |= 0x01 << flaglist.indexOf(va);
  15. }
  16. }
  17. pVariantProperty->setValue(selectNo);
  18. //之后就可以被QtTreePropertyBrowser使用了
  19. m_pTreeBrowser->addProperty(pVariantProperty);

效果:

 如果选择其他的,如图效果,上面的值(name3右边)会同时改变。

全部放在一起的效果图:

原创不易,喜欢就点个赞吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/115124
推荐阅读
相关标签
  

闽ICP备14008679号