如何仅查找Qt设计器中显示的小部件属性?
如何仅查找Qt设计器在属性编辑器中显示的小部件(例如QPushButton)的那些属性? 我可以使用以下代码找到所有属性,包括Qt设计器中未显示的属性:如何仅查找Qt设计器中显示的小部件属性?,qt,qwidget,qt-designer,Qt,Qwidget,Qt Designer,如何仅查找Qt设计器在属性编辑器中显示的小部件(例如QPushButton)的那些属性? 我可以使用以下代码找到所有属性,包括Qt设计器中未显示的属性: // Print all available properties of a Widget: qDebug()<<qPrintable("Widget: QPushButton"); QObject *object = new QPushButton; const QMetaObject *metaobject = object-&
// 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()));
}
//打印小部件的所有可用属性:
qDebug()属性(i);
const char*name=metaproperty.name();
QVariant value=对象->属性(名称);
qDebug()应该说明该属性是否将显示在Qt设计器中
如Qt中所述:
可设计属性指示属性是否应在GUI设计工具(例如Qt Designer)的属性编辑器中可见。大多数属性都是可设计的(默认为true)。您可以指定布尔成员函数,而不是true或false
此外,似乎在设计器中未显示只读属性
以你为例:
// 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();
}
}
但在这方面有几个警告:
- 设计器上的属性可见性可以由其他属性设置为打开或关闭。例如,仅当布尔属性
setCheckable
设置为true时,checked
属性才可设计李>
从QAbstractButton定义中提取:
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)
- 因此,为了达到您想要的效果,我排除了只读和
windowModality
属性,但这有点不太靠谱。我不确定是否有更好的方法来做到这一点
它没有按预期工作。例如,在设计器中未显示以下QPushButton属性,但它们是可设计的:frameGeometry、normalGeometry、frameSize、childrenRect等。您提到的只读属性似乎从未在设计器中显示,无论它们是否可设计。可能,您可以修改代码以检查isReadable()
,但不检查isWritable()
,并将其排除在外。以下代码删除了许多不相关的属性,但我仍然可以看到一些属性,如windowModality、frameGeometry、normalGeometry、childrenRect、windowIcon、windowIconText、windowOpacity、,windowModified等未在Qt Designer中显示。这些属性仅针对应用程序的根/父小部件显示,如QMainWindow或QWidget。代码:我认为您的代码是完美的,因为我注意到Qt Designer也使用这种黑客方法,例如,请参见以下链接中的第638行和第1907行:
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked DESIGNABLE isCheckable NOTIFY toggled USER true)