2010-11-19 12 views
3

QtPropertyBrowser, gelişmiş bir yapılandırma düzenleyicisi olarak kullanıldı mı? GUI öğelerinin özelliklerini düzenlemek için tüm GUI örneklerini görüyorum. Ama uygulama yapılandırması gibi daha soyut bir şeyi düzenlemek istediğimde nasıl başlarım. Ben çok sayfalı yapılandırma iletişim olan bir uygulama oluşturmaQtPropertyBrowser öğesini gelişmiş yapılandırma düzenleyicisi olarak kullanma

:

İşte bir örnek. Bazı ayarlar yazıcı hakkında, bazıları bir veritabanı ile ilgili, bazıları genel uygulama ayarları, bazıları şablon dosya adları ve/veya şablonlarla ilgilidir. Ancak editördeki tüm bu ayrıntılı konfigürasyon sayfalarını tasarlamadan önce, tüm hayal edilebilir konfigürasyon seçeneklerini listeleyen diyalogda "gelişmiş" veya "uzman" sekmesine sahip olmak isterim. Daha sonra tasarım sürecinde daha fazla seçenek toplayacağım, daha kolay kullanıcı dostu konfigürasyon sayfalarına yerleştirilebilecek “kolay” seçenekler hangileridir. Ve etrafta dolaşmak için doğru araç gibi görünen QtPropertyBrowser ile karşılaştım. Ama nasıl başlayacağımı bilemiyorum? GUI nesneleri yerine, bir çeşit soyut yapılandırma nesnesine (bir veya daha fazla) ihtiyacım olduğundan eminim. Ama bununla nereden başlayacağını bilmiyorum. Şu anda tüm fikirlerim karmaşıklaşıyor.

İpuçları için herhangi bir öneri veya işaretçi?

cevap

9

QMetaObject sınıfı aracılığıyla kullanılabilen çalışma zamanı türü bilgilerine göz atmak isteyebilirsiniz. Veri nesneleriniz QObject'un soyundan gelmelidir ve bildirilen bir QOBJECT makrosuna sahip olmalıdır. Ayrıca, veri nesneleri özellikleri boyunca yinelemek ve ilgili editörün özelliklerini oluşturmak ve kurmak basit bir rutin gerekir. Meta nesnesi, değerleri ve yöntem çağırmalarını sıfırlamak için bir arabirim de sağlar. Qt özellik sistemi hakkında daha fazla bilgi burada: The Property System.

Mülkiyet tarayıcı ve yöneticileri beyanı ve başlatma: Aşağıda bunu nasıl küçük bir örnektir

QtTreePropertyBrowser  *_browser; 
QtIntPropertyManager  *_intManager; 
QtDoublePropertyManager  *_doubleManager; 
QtStringPropertyManager  *_stringManager; 

_intManager = new QtIntPropertyManager(); 
_doubleManager = new QtDoublePropertyManager(); 
_stringManager = new QtStringPropertyManager(); 

_browser = new QtTreePropertyBrowser(ui->centralWidget); 

yük özellikleri adları ve değerleri: QtPropertyBrowser örnekleri klasöründe

void loadProperties(QObject *object) 
{ 
    _browser->clear(); 
    if (object) 
    { 
     const QMetaObject *meta = object->metaObject(); 

     qDebug() << "class : " << meta->className(); 

     for (int i=0; i<meta->propertyCount(); i++) 
     { 
      QMetaProperty metaProperty = meta->property(i); 
      QVariant  value = metaProperty.read(object); 
      QtProperty  *property = NULL; 

      qDebug() << "property : " << metaProperty.name() << " : " << value.toInt(); 

      if (metaProperty.type() == QVariant::Int) 
      { 
       property = _intManager->addProperty(metaProperty.name()); 
       _intManager->setValue(property, value.toInt()); 
      } 
      else if (metaProperty.type() == QVariant::Double) 
      { 
       property = _doubleManager->addProperty(metaProperty.name()); 
       _doubleManager->setValue(property, value.toDouble()); 
      } 
      else if (metaProperty.type() == QVariant::String) 
      { 
       property = _stringManager->addProperty(metaProperty.name()); 
       _stringManager->setValue(property, value.toString()); 
      } 

      if (property) 
       _browser->addProperty(property); 
     } 
    } 
} 
+0

Bu gerçekten işe yarayacak kadar basit ve güçlü bir örnek. +1 – hurikhan77

0

Ben tam olarak istediğini düşünüyorum bir demo (object_controller) geliyor. Örnek,ObjectController sınıfının özelliklerini setObject (QObject * object);QObject işlevinde başvurulan şekilde alsa da. Gözlemlemek istediğiniz her şeyin, doğrudan veya dolaylı olarak QObject'u miras alması gerektiğini, yani sınıf hakkında bilgi içeren meta-nesne olduğunu unutmayın. Qt'deki özellikleri okuyorsunuz.