QtTreePropertyBrowser使用大全

本文详细介绍了如何使用QtTreePropertyBrowser创建和定制不同类型的属性,如QString输入、enum下拉与flag多选,包括设置输入规则、枚举选项和自定义验证。展示了如何区分只读与可编辑,以及如何实现实时校验和下拉选择功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、基本介绍

qtTreePropertyBrowser的基本介绍可以参考如下文章(25条消息) Qt属性表控件的使用 QtTreePropertyBrowser_尘中远的博客-优快云博客_qtpropertybrowserhttps://blog.youkuaiyun.com/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。如下

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右边)会同时改变。

全部放在一起的效果图:

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值