2016-04-09 15 views

答えて

6

QObjectから派生したオブジェクトのプロパティは、Qtの メタオブジェクトシステムを介して登録されています。したがって、それらをイントロスペクションするために使用することができる、すなわち、すべてのプロパティと その含有量は、例えば:

#include <QDebug> 
#include <QMetaProperty> 

#include <vector> 
#include <utility> 
#include <algorithm> 

static void dump_props(QObject *o) 
{ 
    auto mo = o->metaObject(); 
    qDebug() << "## Properties of" << o << "##"; 
    do { 
    qDebug() << "### Class" << mo->className() << "###"; 
    std::vector<std::pair<QString, QVariant> > v; 
    v.reserve(mo->propertyCount() - mo->propertyOffset()); 
    for (int i = mo->propertyOffset(); i < mo->propertyCount(); 
      ++i) 
     v.emplace_back(mo->property(i).name(), 
        mo->property(i).read(o)); 
    std::sort(v.begin(), v.end()); 
    for (auto &i : v) 
     qDebug() << i.first << "=>" << i.second; 
    } while ((mo = mo->superClass())); 
} 

出力例:

## Properties of QExpandingLineEdit(0x60600030ba80) ## 
### Class QExpandingLineEdit ### 
### Class QLineEdit ### 
"acceptableInput" => QVariant(bool, true) 
"alignment" => QVariant(int, 129) 
"clearButtonEnabled" => QVariant(bool, false) 
[..] 
"selectedText" => QVariant(QString, "") 
"text" => QVariant(QString, "Sender") 
"undoAvailable" => QVariant(bool, false) 
### Class QWidget ### 
"acceptDrops" => QVariant(bool, true) 
"accessibleDescription" => QVariant(QString, "") 
"accessibleName" => QVariant(QString, "") 
"autoFillBackground" => QVariant(bool, false) 
[..] 
"windowTitle" => QVariant(QString, "") 
"x" => QVariant(int, 0) 
"y" => QVariant(int, 0) 
### Class QObject ### 
"objectName" => QVariant(QString, "") 
関連する問題