本文整理汇总了C++中AbstractProperty类的典型用法代码示例。如果您正苦于以下问题:C++ AbstractProperty类的具体用法?C++ AbstractProperty怎么用?C++ AbstractProperty使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了AbstractProperty类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: applyProperties
static inline void applyProperties(ModelNode &node, const QHash<PropertyName, QVariant> &propertyHash)
{
QHash<PropertyName, QVariant> auxiliaryData = node.auxiliaryData();
foreach (const PropertyName &propertyName, auxiliaryData.keys()) {
if (node.hasAuxiliaryData(propertyName))
node.setAuxiliaryData(propertyName, QVariant());
}
QHashIterator<PropertyName, QVariant> propertyIterator(propertyHash);
while (propertyIterator.hasNext()) {
propertyIterator.next();
const PropertyName propertyName = propertyIterator.key();
if (propertyName == "width" || propertyName == "height") {
node.setAuxiliaryData(propertyIterator.key(), propertyIterator.value());
} else if (node.property(propertyIterator.key()).isDynamic() &&
node.property(propertyIterator.key()).dynamicTypeName() == "alias" &&
node.property(propertyIterator.key()).isBindingProperty()) {
AbstractProperty targetProperty = node.bindingProperty(propertyIterator.key()).resolveToProperty();
if (targetProperty.isValid())
targetProperty.parentModelNode().setAuxiliaryData(targetProperty.name() + "@NodeInstance", propertyIterator.value());
} else {
node.setAuxiliaryData(propertyIterator.key() + "@NodeInstance", propertyIterator.value());
}
}
}
示例2:
const AbstractProperty * PropertyGroup::findProperty(const std::vector<std::string> & path) const
{
// [TODO] Use iterative approach rather than recursion
// Check if path is valid
if (path.size() == 0) {
return nullptr;
}
// Check if first element of the path exists in this group
if (!propertyExists(path.front())) {
return nullptr;
}
// Get the respective property
AbstractProperty * property = m_propertiesMap.at(path.front());
// If there are no more sub-paths, return the found property
if (path.size() == 1) {
return property;
}
// Otherwise, it is an element in the middle of the path, so ensure it is a group
if (!property->isGroup()) {
return nullptr;
}
// Call recursively on subgroup
return property->asGroup()->findProperty({ path.begin() + 1, path.end() });
}
示例3:
AbstractProperty::AbstractProperty(const AbstractProperty &property, AbstractView *view)
: m_propertyName(property.name()),
m_internalNode(property.internalNode()),
m_model(property.model()),
m_view(view)
{
}
示例4: retrieveProperty
QWidget * PropertyDelegate::createEditor(QWidget * parent,
const QStyleOptionViewItem & option, const QModelIndex & index) const
{
AbstractProperty * property = retrieveProperty(index);
if (property->isCollection())
return QStyledItemDelegate::createEditor(parent, option, index);
return m_editorFactory->createEditor(*property, parent);
}
示例5: setString
void VariantEditor::setString(const QString & text)
{
AbstractProperty * prop = dynamic_cast<AbstractProperty *>(m_property);
if (prop == nullptr)
{
return;
}
prop->fromString(text.toStdString());
}
示例6: getProperty
Icon*
CtlMediaObject::getIcon()
{
// icon property is a lower resolution thumb nail of the original picture (but should be displayable on a handheld device).
// TODO: adapt icon to new media object implementataion
AbstractProperty* pProperty = getProperty(AvProperty::ICON);
if (pProperty) {
return new Icon(0, 0, 0, Mime::IMAGE_JPEG, pProperty->getValue());
}
return 0;
}
示例7: toVariant
Variant PropertyGroup::toVariant() const
{
// Create variant map from all properties in the group
Variant map = Variant::map();
for (auto it : m_propertiesMap) {
// Get name and property
std::string name = it.first;
AbstractProperty * prop = it.second;
// Add to variant map
(*map.asMap())[name] = prop->toVariant();
}
// Return variant representation
return map;
}
示例8: retrieveProperty
void PropertyBrowser::expandAllGroups()
{
QAbstractItemModel * model = this->model();
QModelIndexList indexes = model->match(model->index(0,0), Qt::DisplayRole, "*", -1, Qt::MatchWildcard|Qt::MatchRecursive);
for (QModelIndex index : indexes)
{
if (!index.isValid())
continue;
AbstractProperty * property = retrieveProperty(index);
if (property->isGroup() && model->hasChildren(index))
expand(index);
}
}
示例9: at
void AbstractCollection::acceptRecursive(AbstractVisitor * visitor)
{
// Visit all values of the collection
for (size_t i=0; i<count(); i++) {
// Get property
AbstractProperty * prop = at(i);
// Visit property
prop->accept(visitor);
// If it is a collection, visit collection recursively
AbstractCollection * collection = dynamic_cast<AbstractCollection *>(prop);
if (collection) {
collection->acceptRecursive(visitor);
}
}
}
示例10: assign
void PropertyObj::assign(const AbstractProperty& that) {
try {
*this = dynamic_cast<const PropertyObj&>(that);
} catch(const std::bad_cast&) {
OPENSIM_THROW(InvalidArgument,
"Unsupported type. Expected: " + this->getTypeName() +
" | Received: " + that.getTypeName());
}
}
示例11: if
QmlDesigner::QmlRefactoring::PropertyType ModelToTextMerger::propertyType(const AbstractProperty &property, const QString &textValue)
{
if (property.isBindingProperty()) {
QString val = textValue.trimmed();
if (val.isEmpty())
return QmlDesigner::QmlRefactoring::ObjectBinding;
const QChar lastChar = val.at(val.size() - 1);
if (lastChar == '}' || lastChar == ';')
return QmlDesigner::QmlRefactoring::ObjectBinding;
else
return QmlDesigner::QmlRefactoring::ScriptBinding;
} else if (property.isNodeListProperty())
return QmlDesigner::QmlRefactoring::ArrayBinding;
else if (property.isNodeProperty())
return QmlDesigner::QmlRefactoring::ObjectBinding;
else if (property.isVariantProperty())
return QmlDesigner::QmlRefactoring::ScriptBinding;
Q_ASSERT(!"cannot convert property type");
return (QmlDesigner::QmlRefactoring::PropertyType) -1;
}
示例12: detectVerticalCycle
bool detectVerticalCycle(const ModelNode &node, QList<ModelNode> knownNodeList)
{
if (!node.isValid())
return false;
if (knownNodeList.contains(node))
return true;
knownNodeList.append(node);
static QStringList validAnchorLines(QStringList() << "top" << "bottom" << "verticalCenter" << "baseline");
static QStringList anchorNames(QStringList() << "anchors.top" << "anchors.bottom" << "anchors.verticalCenter" << "anchors.baseline");
foreach (const QString &anchorName, anchorNames) {
if (node.hasBindingProperty(anchorName)) {
AbstractProperty targetProperty = node.bindingProperty(anchorName).resolveToProperty();
if (targetProperty.isValid()) {
if (!validAnchorLines.contains(targetProperty.name()))
return true;
if (detectVerticalCycle(targetProperty.parentModelNode(), knownNodeList))
return true;
}
}
}
static QStringList anchorShortcutNames(QStringList() << "anchors.fill" << "anchors.centerIn");
foreach (const QString &anchorName, anchorShortcutNames) {
if (node.hasBindingProperty(anchorName)) {
ModelNode targetNode = node.bindingProperty(anchorName).resolveToModelNode();
if (targetNode.isValid() && detectVerticalCycle(targetNode, knownNodeList))
return true;
}
}
return false;
}
示例13: addGroup
PropertyGroup * PropertyGroup::ensureGroup(const std::vector<std::string> & path)
{
// [TODO] Use iterative approach rather than recursion
// Check if path is valid
if (path.size() == 0) {
return nullptr;
}
// Check if group exists
PropertyGroup * group = nullptr;
if (propertyExists(path.front()))
{
// Get property
AbstractProperty * property = m_propertiesMap.at(path.front());
// Abort if this is not a group
if (!property->isGroup()) {
return nullptr;
}
// Get as group
group = property->asGroup();
}
else
{
// Add new group
group = addGroup(path.front());
}
// If there are no more sub-paths, return the group
if (path.size() == 1) {
return group;
}
// Otherwise, call recursively on subgroup
return group->ensureGroup(std::vector<std::string>(path.begin() + 1, path.end()));
}
示例14: fromVariant
bool PropertyGroup::fromVariant(const Variant & value)
{
// Check if variant is a map
if (!value.isMap()) {
return false;
}
// Get all values from variant map
for (auto it : *value.asMap()) {
// Get name and value
std::string name = it.first;
const Variant & var = it.second;
// If this names an existing property, set its value
AbstractProperty * prop = this->property(name);
if (prop) {
prop->fromVariant(var);
}
}
// Done
return true;
}
示例15: connect
QWidget * VariantEditor::createLineEdit()
{
auto lineEdit = new QLineEdit{this};
AbstractProperty * prop = dynamic_cast<AbstractProperty *>(m_property);
if (prop == nullptr)
{
return nullptr;
}
lineEdit->setText(QString::fromStdString(prop->toString()));
connect(lineEdit, &QLineEdit::textEdited, this, &VariantEditor::setString);
m_propertyChangedConnection = prop->changed.connect(
[this, lineEdit, prop]()
{
lineEdit->setText(QString::fromStdString(prop->toString()));
});
return lineEdit;
}