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

类似于这种:

就是右下角这个框,有属性名字和对应的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     item->setAttribute(QLatin1String("decimals"), 5);
 96     item->setAttribute(QLatin1String("readOnly"), true);
 97     topItem->addSubProperty(item);
 98 
 99     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property"));
100     item->setValue("Value");
101     topItem->addSubProperty(item);
102 
103     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (Password)"));
104     item->setAttribute(QLatin1String("echoMode"), QLineEdit::Password);
105     item->setValue("Password");
106     topItem->addSubProperty(item);
107 
108     // Readonly String Property
109     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (ReadOnly)"));
110     item->setAttribute(QLatin1String("readOnly"), true);
111     item->setValue("readonly text");
112     topItem->addSubProperty(item);
113 
114     item = variantManager->addProperty(QVariant::Date, QString::number(i++) + QLatin1String(" Date Property"));
115     item->setValue(QDate::currentDate().addDays(2));
116     topItem->addSubProperty(item);
117 
118     item = variantManager->addProperty(QVariant::Time, QString::number(i++) + QLatin1String(" Time Property"));
119     item->setValue(QTime::currentTime());
120     topItem->addSubProperty(item);
121 
122     item = variantManager->addProperty(QVariant::DateTime, QString::number(i++) + QLatin1String(" DateTime Property"));
123     item->setValue(QDateTime::currentDateTime());
124     topItem->addSubProperty(item);
125 
126     item = variantManager->addProperty(QVariant::KeySequence, QString::number(i++) + QLatin1String(" KeySequence Property"));
127     item->setValue(QKeySequence(Qt::ControlModifier | Qt::Key_Q));
128     topItem->addSubProperty(item);
129 
130     item = variantManager->addProperty(QVariant::Char, QString::number(i++) + QLatin1String(" Char Property"));
131     item->setValue(QChar(386));
132     topItem->addSubProperty(item);
133 
134     item = variantManager->addProperty(QVariant::Locale, QString::number(i++) + QLatin1String(" Locale Property"));
135     item->setValue(QLocale(QLocale::Polish, QLocale::Poland));
136     topItem->addSubProperty(item);
137 
138     item = variantManager->addProperty(QVariant::Point, QString::number(i++) + QLatin1String(" Point Property"));
139     item->setValue(QPoint(10, 10));
140     topItem->addSubProperty(item);
141 
142     item = variantManager->addProperty(QVariant::PointF, QString::number(i++) + QLatin1String(" PointF Property"));
143     item->setValue(QPointF(1.2345, -1.23451));
144     item->setAttribute(QLatin1String("decimals"), 3);
145     topItem->addSubProperty(item);
146 
147     item = variantManager->addProperty(QVariant::Size, QString::number(i++) + QLatin1String(" Size Property"));
148     item->setValue(QSize(20, 20));
149     item->setAttribute(QLatin1String("minimum"), QSize(10, 10));
150     item->setAttribute(QLatin1String("maximum"), QSize(30, 30));
151     topItem->addSubProperty(item);
152 
153     item = variantManager->addProperty(QVariant::SizeF, QString::number(i++) + QLatin1String(" SizeF Property"));
154     item->setValue(QSizeF(1.2345, 1.2345));
155     item->setAttribute(QLatin1String("decimals"), 3);
156     item->setAttribute(QLatin1String("minimum"), QSizeF(0.12, 0.34));
157     item->setAttribute(QLatin1String("maximum"), QSizeF(20.56, 20.78));
158     topItem->addSubProperty(item);
159 
160     item = variantManager->addProperty(QVariant::Rect, QString::number(i++) + QLatin1String(" Rect Property"));
161     item->setValue(QRect(10, 10, 20, 20));
162     topItem->addSubProperty(item);
163     item->setAttribute(QLatin1String("constraint"), QRect(0, 0, 50, 50));
164 
165     item = variantManager->addProperty(QVariant::RectF, QString::number(i++) + QLatin1String(" RectF Property"));
166     item->setValue(QRectF(1.2345, 1.2345, 1.2345, 1.2345));
167     topItem->addSubProperty(item);
168     item->setAttribute(QLatin1String("constraint"), QRectF(0, 0, 50, 50));
169     item->setAttribute(QLatin1String("decimals"), 3);
170 
171     item = variantManager->addProperty(QtVariantPropertyManager::enumTypeId(),
172         QString::number(i++) + QLatin1String(" Enum Property"));
173     QStringList enumNames;
174     enumNames << "Enum0" << "Enum1" << "Enum2";
175     item->setAttribute(QLatin1String("enumNames"), enumNames);
176     item->setValue(1);
177     topItem->addSubProperty(item);
178 
179     item = variantManager->addProperty(QtVariantPropertyManager::flagTypeId(),
180         QString::number(i++) + QLatin1String(" Flag Property"));
181     QStringList flagNames;
182     flagNames << "Flag0" << "Flag1" << "Flag2";
183     item->setAttribute(QLatin1String("flagNames"), flagNames);
184     item->setValue(5);
185     topItem->addSubProperty(item);
186 
187     item = variantManager->addProperty(QVariant::SizePolicy, QString::number(i++) + QLatin1String(" SizePolicy Property"));
188     topItem->addSubProperty(item);
189 
190     item = variantManager->addProperty(QVariant::Font, QString::number(i++) + QLatin1String(" Font Property"));
191     topItem->addSubProperty(item);
192 
193     item = variantManager->addProperty(QVariant::Cursor, QString::number(i++) + QLatin1String(" Cursor Property"));
194     topItem->addSubProperty(item);
195 
196     item = variantManager->addProperty(QVariant::Color, QString::number(i++) + QLatin1String(" Color Property"));
197     topItem->addSubProperty(item);
198 
199     variantFactory = new QtVariantEditorFactory();
200 
201     variantEditor = new QtTreePropertyBrowser();
202     variantEditor->setFactoryForManager(variantManager, variantFactory);
203     variantEditor->addProperty(topItem);
204     variantEditor->setPropertiesWithoutValueMarked(true);
205     variantEditor->setRootIsDecorated(false);
206 
207     setWidget(variantEditor);
208 
209     //variantEditor->show();
210 
211 }
212 
213 void NodePropertyWidget::createDisplayTreeProperty(){
214 
215     variantManager = new QtVariantPropertyManager();
216 
217     int i = 0;
218     topItem = variantManager->addProperty(QtVariantPropertyManager::groupTypeId(),
219         QString::number(i++) + QLatin1String(" Display Property"));
220 
221     item = variantManager->addProperty(QVariant::Bool, QString::number(i++) + QLatin1String(" Bool Property"));
222     item->setValue(true);
223     topItem->addSubProperty(item);
224 
225     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property"));
226     item->setValue(20);
227     item->setAttribute(QLatin1String("minimum"), 0);
228     item->setAttribute(QLatin1String("maximum"), 100);
229     item->setAttribute(QLatin1String("singleStep"), 10);
230     topItem->addSubProperty(item);
231 
232     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property (ReadOnly)"));
233     item->setValue(20);
234     item->setAttribute(QLatin1String("minimum"), 0);
235     item->setAttribute(QLatin1String("maximum"), 100);
236     item->setAttribute(QLatin1String("singleStep"), 10);
237     item->setAttribute(QLatin1String("readOnly"), true);
238     topItem->addSubProperty(item);
239 
240     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property"));
241     item->setValue(1.2345);
242     item->setAttribute(QLatin1String("singleStep"), 0.1);
243     item->setAttribute(QLatin1String("decimals"), 3);
244     topItem->addSubProperty(item);
245 
246     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property (ReadOnly)"));
247     item->setValue(1.23456);
248     item->setAttribute(QLatin1String("singleStep"), 0.1);
249     item->setAttribute(QLatin1String("decimals"), 5);
250     item->setAttribute(QLatin1String("readOnly"), true);
251     topItem->addSubProperty(item);
252 
253     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property"));
254     item->setValue("Value");
255     topItem->addSubProperty(item);
256 
257     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (Password)"));
258     item->setAttribute(QLatin1String("echoMode"), QLineEdit::Password);
259     item->setValue("Password");
260     topItem->addSubProperty(item);
261 
262     // Readonly String Property
263     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (ReadOnly)"));
264     item->setAttribute(QLatin1String("readOnly"), true);
265     item->setValue("readonly text");
266     topItem->addSubProperty(item);
267 
268     item = variantManager->addProperty(QVariant::Date, QString::number(i++) + QLatin1String(" Date Property"));
269     item->setValue(QDate::currentDate().addDays(2));
270     topItem->addSubProperty(item);
271 
272     item = variantManager->addProperty(QVariant::Time, QString::number(i++) + QLatin1String(" Time Property"));
273     item->setValue(QTime::currentTime());
274     topItem->addSubProperty(item);
275 
276     item = variantManager->addProperty(QVariant::DateTime, QString::number(i++) + QLatin1String(" DateTime Property"));
277     item->setValue(QDateTime::currentDateTime());
278     topItem->addSubProperty(item);
279 
280     item = variantManager->addProperty(QVariant::KeySequence, QString::number(i++) + QLatin1String(" KeySequence Property"));
281     item->setValue(QKeySequence(Qt::ControlModifier | Qt::Key_Q));
282     topItem->addSubProperty(item);
283 
284     item = variantManager->addProperty(QVariant::Char, QString::number(i++) + QLatin1String(" Char Property"));
285     item->setValue(QChar(386));
286     topItem->addSubProperty(item);
287 
288     item = variantManager->addProperty(QVariant::Locale, QString::number(i++) + QLatin1String(" Locale Property"));
289     item->setValue(QLocale(QLocale::Polish, QLocale::Poland));
290     topItem->addSubProperty(item);
291 
292     item = variantManager->addProperty(QVariant::Point, QString::number(i++) + QLatin1String(" Point Property"));
293     item->setValue(QPoint(10, 10));
294     topItem->addSubProperty(item);
295 
296     item = variantManager->addProperty(QVariant::PointF, QString::number(i++) + QLatin1String(" PointF Property"));
297     item->setValue(QPointF(1.2345, -1.23451));
298     item->setAttribute(QLatin1String("decimals"), 3);
299     topItem->addSubProperty(item);
300 
301     item = variantManager->addProperty(QVariant::Size, QString::number(i++) + QLatin1String(" Size Property"));
302     item->setValue(QSize(20, 20));
303     item->setAttribute(QLatin1String("minimum"), QSize(10, 10));
304     item->setAttribute(QLatin1String("maximum"), QSize(30, 30));
305     topItem->addSubProperty(item);
306 
307     item = variantManager->addProperty(QVariant::SizeF, QString::number(i++) + QLatin1String(" SizeF Property"));
308     item->setValue(QSizeF(1.2345, 1.2345));
309     item->setAttribute(QLatin1String("decimals"), 3);
310     item->setAttribute(QLatin1String("minimum"), QSizeF(0.12, 0.34));
311     item->setAttribute(QLatin1String("maximum"), QSizeF(20.56, 20.78));
312     topItem->addSubProperty(item);
313 
314     item = variantManager->addProperty(QVariant::Rect, QString::number(i++) + QLatin1String(" Rect Property"));
315     item->setValue(QRect(10, 10, 20, 20));
316     topItem->addSubProperty(item);
317     item->setAttribute(QLatin1String("constraint"), QRect(0, 0, 50, 50));
318 
319     item = variantManager->addProperty(QVariant::RectF, QString::number(i++) + QLatin1String(" RectF Property"));
320     item->setValue(QRectF(1.2345, 1.2345, 1.2345, 1.2345));
321     topItem->addSubProperty(item);
322     item->setAttribute(QLatin1String("constraint"), QRectF(0, 0, 50, 50));
323     item->setAttribute(QLatin1String("decimals"), 3);
324 
325     item = variantManager->addProperty(QtVariantPropertyManager::enumTypeId(),
326         QString::number(i++) + QLatin1String(" Enum Property"));
327     QStringList enumNames;
328     enumNames << "Enum0" << "Enum1" << "Enum2";
329     item->setAttribute(QLatin1String("enumNames"), enumNames);
330     item->setValue(1);
331     topItem->addSubProperty(item);
332 
333     item = variantManager->addProperty(QtVariantPropertyManager::flagTypeId(),
334         QString::number(i++) + QLatin1String(" Flag Property"));
335     QStringList flagNames;
336     flagNames << "Flag0" << "Flag1" << "Flag2";
337     item->setAttribute(QLatin1String("flagNames"), flagNames);
338     item->setValue(5);
339     topItem->addSubProperty(item);
340 
341     item = variantManager->addProperty(QVariant::SizePolicy, QString::number(i++) + QLatin1String(" SizePolicy Property"));
342     topItem->addSubProperty(item);
343 
344     item = variantManager->addProperty(QVariant::Font, QString::number(i++) + QLatin1String(" Font Property"));
345     topItem->addSubProperty(item);
346 
347     item = variantManager->addProperty(QVariant::Cursor, QString::number(i++) + QLatin1String(" Cursor Property"));
348     topItem->addSubProperty(item);
349 
350     item = variantManager->addProperty(QVariant::Color, QString::number(i++) + QLatin1String(" Color Property"));
351     topItem->addSubProperty(item);
352 
353     variantFactory = new QtVariantEditorFactory();
354 
355     variantEditor = new QtTreePropertyBrowser();
356     variantEditor->setFactoryForManager(variantManager, variantFactory);
357     variantEditor->addProperty(topItem);
358     variantEditor->setPropertiesWithoutValueMarked(true);
359     variantEditor->setRootIsDecorated(false);
360 
361     setWidget(variantEditor);
362 
363     //variantEditor->show();
364 
365 }
366 
367 void NodePropertyWidget::createArrowTreeProperty(){
368 
369     variantManager = new QtVariantPropertyManager();
370 
371     int i = 0;
372     topItem = variantManager->addProperty(QtVariantPropertyManager::groupTypeId(),
373         QString::number(i++) + QLatin1String("Arrow Property"));
374 
375     item = variantManager->addProperty(QVariant::Bool, QString::number(i++) + QLatin1String(" Bool Property"));
376     item->setValue(true);
377     topItem->addSubProperty(item);
378 
379     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property"));
380     item->setValue(20);
381     item->setAttribute(QLatin1String("minimum"), 0);
382     item->setAttribute(QLatin1String("maximum"), 100);
383     item->setAttribute(QLatin1String("singleStep"), 10);
384     topItem->addSubProperty(item);
385 
386     item = variantManager->addProperty(QVariant::Int, QString::number(i++) + QLatin1String(" Int Property (ReadOnly)"));
387     item->setValue(20);
388     item->setAttribute(QLatin1String("minimum"), 0);
389     item->setAttribute(QLatin1String("maximum"), 100);
390     item->setAttribute(QLatin1String("singleStep"), 10);
391     item->setAttribute(QLatin1String("readOnly"), true);
392     topItem->addSubProperty(item);
393 
394     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property"));
395     item->setValue(1.2345);
396     item->setAttribute(QLatin1String("singleStep"), 0.1);
397     item->setAttribute(QLatin1String("decimals"), 3);
398     topItem->addSubProperty(item);
399 
400     item = variantManager->addProperty(QVariant::Double, QString::number(i++) + QLatin1String(" Double Property (ReadOnly)"));
401     item->setValue(1.23456);
402     item->setAttribute(QLatin1String("singleStep"), 0.1);
403     item->setAttribute(QLatin1String("decimals"), 5);
404     item->setAttribute(QLatin1String("readOnly"), true);
405     topItem->addSubProperty(item);
406 
407     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property"));
408     item->setValue("Value");
409     topItem->addSubProperty(item);
410 
411     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (Password)"));
412     item->setAttribute(QLatin1String("echoMode"), QLineEdit::Password);
413     item->setValue("Password");
414     topItem->addSubProperty(item);
415 
416     // Readonly String Property
417     item = variantManager->addProperty(QVariant::String, QString::number(i++) + QLatin1String(" String Property (ReadOnly)"));
418     item->setAttribute(QLatin1String("readOnly"), true);
419     item->setValue("readonly text");
420     topItem->addSubProperty(item);
421 
422     item = variantManager->addProperty(QVariant::Date, QString::number(i++) + QLatin1String(" Date Property"));
423     item->setValue(QDate::currentDate().addDays(2));
424     topItem->addSubProperty(item);
425 
426     item = variantManager->addProperty(QVariant::Time, QString::number(i++) + QLatin1String(" Time Property"));
427     item->setValue(QTime::currentTime());
428     topItem->addSubProperty(item);
429 
430     item = variantManager->addProperty(QVariant::DateTime, QString::number(i++) + QLatin1String(" DateTime Property"));
431     item->setValue(QDateTime::currentDateTime());
432     topItem->addSubProperty(item);
433 
434     item = variantManager->addProperty(QVariant::KeySequence, QString::number(i++) + QLatin1String(" KeySequence Property"));
435     item->setValue(QKeySequence(Qt::ControlModifier | Qt::Key_Q));
436     topItem->addSubProperty(item);
437 
438     item = variantManager->addProperty(QVariant::Char, QString::number(i++) + QLatin1String(" Char Property"));
439     item->setValue(QChar(386));
440     topItem->addSubProperty(item);
441 
442     item = variantManager->addProperty(QVariant::Locale, QString::number(i++) + QLatin1String(" Locale Property"));
443     item->setValue(QLocale(QLocale::Polish, QLocale::Poland));
444     topItem->addSubProperty(item);
445 
446     item = variantManager->addProperty(QVariant::Point, QString::number(i++) + QLatin1String(" Point Property"));
447     item->setValue(QPoint(10, 10));
448     topItem->addSubProperty(item);
449 
450     item = variantManager->addProperty(QVariant::PointF, QString::number(i++) + QLatin1String(" PointF Property"));
451     item->setValue(QPointF(1.2345, -1.23451));
452     item->setAttribute(QLatin1String("decimals"), 3);
453     topItem->addSubProperty(item);
454 
455     item = variantManager->addProperty(QVariant::Size, QString::number(i++) + QLatin1String(" Size Property"));
456     item->setValue(QSize(20, 20));
457     item->setAttribute(QLatin1String("minimum"), QSize(10, 10));
458     item->setAttribute(QLatin1String("maximum"), QSize(30, 30));
459     topItem->addSubProperty(item);
460 
461     item = variantManager->addProperty(QVariant::SizeF, QString::number(i++) + QLatin1String(" SizeF Property"));
462     item->setValue(QSizeF(1.2345, 1.2345));
463     item->setAttribute(QLatin1String("decimals"), 3);
464     item->setAttribute(QLatin1String("minimum"), QSizeF(0.12, 0.34));
465     item->setAttribute(QLatin1String("maximum"), QSizeF(20.56, 20.78));
466     topItem->addSubProperty(item);
467 
468     item = variantManager->addProperty(QVariant::Rect, QString::number(i++) + QLatin1String(" Rect Property"));
469     item->setValue(QRect(10, 10, 20, 20));
470     topItem->addSubProperty(item);
471     item->setAttribute(QLatin1String("constraint"), QRect(0, 0, 50, 50));
472 
473     item = variantManager->addProperty(QVariant::RectF, QString::number(i++) + QLatin1String(" RectF Property"));
474     item->setValue(QRectF(1.2345, 1.2345, 1.2345, 1.2345));
475     topItem->addSubProperty(item);
476     item->setAttribute(QLatin1String("constraint"), QRectF(0, 0, 50, 50));
477     item->setAttribute(QLatin1String("decimals"), 3);
478 
479     item = variantManager->addProperty(QtVariantPropertyManager::enumTypeId(),
480         QString::number(i++) + QLatin1String(" Enum Property"));
481     QStringList enumNames;
482     enumNames << "Enum0" << "Enum1" << "Enum2";
483     item->setAttribute(QLatin1String("enumNames"), enumNames);
484     item->setValue(1);
485     topItem->addSubProperty(item);
486 
487     item = variantManager->addProperty(QtVariantPropertyManager::flagTypeId(),
488         QString::number(i++) + QLatin1String(" Flag Property"));
489     QStringList flagNames;
490     flagNames << "Flag0" << "Flag1" << "Flag2";
491     item->setAttribute(QLatin1String("flagNames"), flagNames);
492     item->setValue(5);
493     topItem->addSubProperty(item);
494 
495     item = variantManager->addProperty(QVariant::SizePolicy, QString::number(i++) + QLatin1String(" SizePolicy Property"));
496     topItem->addSubProperty(item);
497 
498     item = variantManager->addProperty(QVariant::Font, QString::number(i++) + QLatin1String(" Font Property"));
499     topItem->addSubProperty(item);
500 
501     item = variantManager->addProperty(QVariant::Cursor, QString::number(i++) + QLatin1String(" Cursor Property"));
502     topItem->addSubProperty(item);
503 
504     item = variantManager->addProperty(QVariant::Color, QString::number(i++) + QLatin1String(" Color Property"));
505     topItem->addSubProperty(item);
506 
507     variantFactory = new QtVariantEditorFactory();
508 
509     variantEditor = new QtTreePropertyBrowser();
510     variantEditor->setFactoryForManager(variantManager, variantFactory);
511     variantEditor->addProperty(topItem);
512     variantEditor->setPropertiesWithoutValueMarked(true);
513     variantEditor->setRootIsDecorated(false);
514 
515     setWidget(variantEditor);
516     //variantEditor->show();
517 
518 }
View Code

以下的参考中还会给出很多propertybrowser的很多例子

references:

https://github.com/commontk/QtPropertyBrowser

原文地址:https://www.cnblogs.com/foohack/p/4553802.html