[英]Dump all properties of a QObject derived object
如何轉儲Qt對象的所有屬性?
用於調試目的,例如分析工廠返回的對象時。
從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, "")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.