Qt编程之实现属性窗口编辑器

本文介绍了如何在Qt环境中使用QtPropertyBrowser创建属性编辑器Widget,该Widget作为QDockWidget添加到QMainWindow中。内容包括QDockWidget的使用方式,以及QtPropertyBrowser如何作为属性浏览窗口的实现,提供了相关的代码示例和参考资料。
摘要由CSDN通过智能技术生成

类似于这种:

 

就是右下角这个框,有属性名字和对应的value编辑。

 

这个Widget是作为一个QDockWidget被添加到QMainWindow中的。QMainWindow必须要有centralWidget才能添加DockWidget。DockWidget是可以浮动于centralWidget周边(上下左右)的一种Widget。QMainWindow中有addDockWiget这相应的函数添加。

 

而QDockWidget中可以设置相应的Widget,这个Widget(实际上就是属性编辑浏览窗口。)这个Widget实际上不是Qt Native自带的。而是Qt的解决方案中提供的Widget,也就是别人帮你封装做好了Widget,拿来用就可以了。这个Widget就是QtPropertyBrowser

 

样例代码:

nodeproperty.h  此类继承了QDockWidget

 1 #ifndef NODE_PROPERTY_H
 2 #define NODE_PROPERTY_H
 3 
 4 #include <QObject>
 5 #include <QDockWidget>
 6 #include "diagramitem.h"
 7 
 8 
 9 QT_BEGIN_NAMESPACE
10 
11 class QDockWidget;
12 class QtVariantPropertyManager;
13 class QtProperty;
14 class QtVariantProperty;
15 class QtVariantEditorFactory;
16 class QtTreePropertyBrowser;
17 QT_END_NAMESPACE
18 
19 
20 class NodePropertyWidget:public  QDockWidget
21 {
22 public:
23     
24     NodePropertyWidget(DiagramItem::DiagramType type, QWidget* parent = 0);
25     ~NodePropertyWidget();
26 
27 private:
28     void createProcessTreeProperty();
29     void createDisplayTreeProperty();
30     void createArrowTreeProperty();
31 
32 private:
33     QtVariantPropertyManager *variantManager;
34     QtProperty *topItem;
35     QtVariantProperty *item;
36     QtVariantEditorFactory *variantFactory;
37     QtTreePropertyBrowser *variantEditor;
38 };
39 
40 
41 
42 
43 #endif
View Code

nodeproperty.cpp

  1 #include <QDate>
  2 #include <QLocale>
  3 #include <QDockWidget>
  4 #include <QSizePolicy>
  5 
  6 #include "qtpropertymanager.h"
  7 #include "qtvariantproperty.h"
  8 #include "qttreepropertybrowser.h"
  9 
 10 #include "nodeproperty.h"
 11 
 12 
 13 
 14 
 15 
 16 NodePropertyWidget::NodePropertyWidget(DiagramItem::DiagramType type, QWidget * parent) :QDockWidget(parent)
 17 {
 18     
 19     switch (type)
 20     {
 21     case DiagramItem::Process:
 22         setWindowTitle("Process Property");
 23         setFloating(true);
 24         
 25         setAllowedAreas(Qt::RightDockWidgetArea);
 26         setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
 27         createProcessTreeProperty();
 28         break;
 29     case DiagramItem::Display:
 30         setWindowTitle("Display Property");
 31         setFloating(true);
 32         
 33         setAllowedAreas(Qt::RightDockWidgetArea);
 34         setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
 35         createDisplayTreeProperty();
 36         break;
 37     case DiagramItem::Line:
 38         setWindowTitle("Arrow Property");
 39         setFloating(true);
 40         
 41         setAllowedAreas(Qt::RightDockWidgetArea);
 42         setSizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
 43         createArrowTreeProperty();
 44         break;
 45     default:
 46         break;
 47     }
 48 }
 49 
 50 NodePropertyWidget::~NodePropertyWidget()
 51 {
 52 
 53     delete variantManager;
 54     delete variantFactory;
 55     delete variantEditor;
 56 }
 57 
 58 
 59 void NodePropertyWidget::createProcessTreeProperty(){
 60 
 61     variantManager = new QtVariantPropertyManager();
 62 
 63     int i = 0;
 64     topItem = variantManager->addProperty(QtVariantPropertyManager::groupTypeId(),
 65         QString::number(i++) + QLatin1String("Process Property"));
 66 
 67     item = variantManager->addProperty(QVariant::Bool, QString::number(i++) + QLatin1String(" Bool Property"));
 68     item->setValue(true);
 69     topItem->addSubProperty(item);
 70 
 71     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property"));
 72     item->setValue(20);
 73     item->setAttribute(QLatin1String("minimum"), 0);
 74     item->setAttribute(QLatin1String("maximum"), 100);
 75     item->setAttribute(QLatin1String("singleStep"), 10);
 76     topItem->addSubProperty(item);
 77 
 78     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property (ReadOnly)"));
 79     item->setValue(20);
 80     item->setAttribute(QLatin1String("minimum"), 0);
 81     item->setAttribute(QLatin1String("maximum"), 100);
 82     item->setAttribute(QLatin1String("singleStep"), 10);
 83     item->setAttribute(QLatin1String("readOnly"), true);
 84     topItem->addSubProperty(item);
 85 
 86     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property"));
 87     item->setValue(1.2345);
 88     item->setAttribute(QLatin1String("singleStep"), 0.1);
 89     item->setAttribute(QLatin1String("decimals"), 3);
 90     topItem->addSubProperty(item);
 91 
 92     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property (ReadOnly)"));
 93     item->setValue(1.23456);
 94     item->setAttribute(QLatin1String("singleStep"), 0.1);
 95  
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值