hur*_*n77 3 configuration user-interface qt qt4
有没有人使用QtPropertyBrowser作为高级配置编辑器?我只看到GUI示例,编辑GUI元素的属性.但是,如果我想编辑更抽象的东西,比如应用程序配置,我将如何开始呢?
这是一个例子:
我正在创建一个具有多页配置对话框的应用程序.一些设置是关于打印机,一些是关于数据库,一些是通用应用程序设置,一些是关于模板文件名和/或模板.但是在编辑器中设计所有这些详细的配置页面之前,我想在对话框中有一个"高级"或"专家"选项卡,其中列出了所有可以想象的配置选项.在设计过程的后期,我会收集越来越多的选项,决定哪些是"简单"选项放入一些更加用户友好的配置页面.谷歌搜索我来到QtPropertyBrowser,似乎是正确的工具.但我不确定如何开始?我很确定,我需要某种抽象配置对象(一个或多个),而不是GUI对象.但我不喜欢 知道在哪里或如何开始.目前我的所有想法都看起来很复杂.
有关提示的任何建议或指示?
ser*_*nko 10
您可能想要查看通过QMetaObject
类可用的运行时类型信息.您的数据对象应该是QObject
后代并QOBJECT
声明了一个宏.此外,您还需要一个简单的例程,它将遍历数据对象属性并创建和设置相应的编辑器属性.Meta对象还提供了用于重置值和方法调用的接口.有关Qt属性系统的更多信息,请访问:Property System.下面是一个关于如何执行此操作的小示例:
属性浏览器和管理器声明和初始化:
QtTreePropertyBrowser *_browser;
QtIntPropertyManager *_intManager;
QtDoublePropertyManager *_doubleManager;
QtStringPropertyManager *_stringManager;
_intManager = new QtIntPropertyManager();
_doubleManager = new QtDoublePropertyManager();
_stringManager = new QtStringPropertyManager();
_browser = new QtTreePropertyBrowser(ui->centralWidget);
Run Code Online (Sandbox Code Playgroud)
加载属性名称和值:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)