Как найти только те свойства виджета, которые отображаются в Qt Designer? - PullRequest
1 голос
/ 26 марта 2019

Как мне найти только те свойства виджета (например, QPushButton) , которые Qt Designer показывает в Редакторе свойств ? Я могу найти все свойства, включая те, которые не показаны в Qt Designer, используя следующий код:

// Print all available properties of a Widget:
qDebug()<<qPrintable("Widget: QPushButton");
QObject *object = new QPushButton;
const QMetaObject *metaobject = object->metaObject();
for (int i=0; i<metaobject->propertyCount(); ++i) {
    QMetaProperty metaproperty = metaobject->property(i);
    const char *name = metaproperty.name();
    QVariant value = object->property(name);
    qDebug()<<qPrintable("\n" + QString(name) + "\n" + QString(value.typeName()));
}

1 Ответ

2 голосов
/ 26 марта 2019

isDesignable () должен указать, будет ли свойство отображаться в Qt Designer.

Как указано в документации Qt :

Атрибут DESIGNABLE указывает, должно ли свойство отображаться в редакторе свойств инструмента дизайна GUI (например, Qt Designer).Большинство свойств являются DESIGNABLE (по умолчанию true).Вместо true или false вы можете указать логическую функцию-член.

Также кажется, что свойства только для чтения не отображаются в Designer.

Следуя вашему примеру:

    // Print all available properties of a Widget:
    qDebug()<<qPrintable("Widget: QPushButton");
    QPushButton *object = new QPushButton(this);
    const QMetaObject *metaobject = object->metaObject();
    for (int i=0; i<metaobject->propertyCount(); ++i) {
        QMetaProperty metaproperty = metaobject->property(i);
        const char *name = metaproperty.name();
        QVariant value = object->property(name);
        bool isReadOnly = metaproperty.isReadable() && !metaproperty.isWritable();
        bool isWinModal = metaproperty.name() == QString("windowModality"); // removed windowModality manually
        if(!isReadOnly && metaproperty.isDesignable(object) && !isWinModal){
            qDebug() << metaproperty.name();
        }
    }

Это печатает:

Widget: QPushButton
objectName
enabled
geometry
sizePolicy
minimumSize
maximumSize
sizeIncrement
baseSize
palette
font
cursor
mouseTracking
tabletTracking
focusPolicy
contextMenuPolicy
acceptDrops
toolTip
toolTipDuration
statusTip
whatsThis
accessibleName
accessibleDescription
layoutDirection
autoFillBackground
styleSheet
locale
inputMethodHints
text
icon
iconSize
shortcut
checkable
autoRepeat
autoExclusive
autoRepeatDelay
autoRepeatInterval
autoDefault
default
flat

Но есть несколько предостережений по этому поводу:

  • Видимость свойства в Designer может быть включена или отключена другими свойствами.Например, свойство checked доступно для разработки, только если для логического свойства setCheckable установлено значение true.

Извлечено из определения QAbstractButton:

Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)

  • Итак, для достижения того, что вы хотите, я исключаю свойства только для чтения и windowModality, но это довольно странно,Я не уверен, есть ли лучший способ сделать это.
...