def __init__(self, parent=None, qobject=None): super(ObjectInfoWidget, self).__init__(parent) self.setWindowIcon(Icon("applications-development")) self.setWindowTitle("QObject Inspector") layout = QtGui.QHBoxLayout() self.setLayout(layout) layout.setSpacing(0) layout.setMargin(0) self.__splitter = splitter = QtGui.QSplitter(QtCore.Qt.Horizontal, self) layout.addWidget(splitter) self.__form = form = PropertyEditor(parent=splitter, qobject=qobject) self.__tree = tree = TreeQObjectWidget(parent=splitter, qobject=qobject) splitter.addWidget(tree) splitter.addWidget(form) treeSelectionModel = tree.viewWidget().selectionModel() QtCore.QObject.connect( treeSelectionModel, QtCore.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self.__onSelectionChanged)
def setQObject(self, qobject): """Sets the current QObject whose properties are to been seen by the editor. :param qobject: the new QObject (can be None) """ ui = self.__ui superClassName = "" _class = "" className = "" isWidget = False propCount = 0 if qobject is None: self.__qobject = None else: _class = qobject.__class__.__name__ self.__qobject = weakref.ref(qobject) metaObject = qobject.metaObject() if metaObject is not None: className = metaObject.className() superClass = metaObject.superClass() if superClass is not None: superClassName = superClass.className() isWidget = qobject.isWidgetType() propCount = metaObject.propertyCount() ui.classLineEdit.setText(_class) ui.classNameLineEdit.setText(className) ui.superClassNameLineEdit.setText(superClassName) ui.isWidgetLineEdit.setText(str(isWidget)) ui.focusButton.setEnabled(isWidget) propTree = ui.propertiesTreeWidget QtCore.QObject.disconnect( propTree, QtCore.SIGNAL("itemChanged (QTreeWidgetItem*, int)"), self.__onPropertyTreeChanged) propTree.clear() if propCount == 0: return metaO, props = metaObject, [] while True: first, last = metaO.propertyOffset(), metaO.propertyCount() if first < last: class_props = {} for p_index in range(first, last): metaProp = metaObject.property(p_index) class_props[metaProp.name()] = metaProp props.insert(0, (metaO, class_props)) metaO = metaO.superClass() if metaO is None: break # build tree for metaO, props in props: topItem = QtGui.QTreeWidgetItem(propTree) topItem.setText(0, metaO.className()) for prop_name in sorted(props.keys()): metaProp = props[prop_name] prop_type = metaProp.typeName() value = qobject.property(prop_name) prop_value = getPropertyValueDisplay(metaProp, value) columns = [prop_name, prop_type, prop_value] propItem = QtGui.QTreeWidgetItem(topItem, columns) propItem.setFlags(propItem.flags() | QtCore.Qt.ItemIsEditable) propItem.setData(2, QtCore.Qt.UserRole, prop_name) propItem.setData(2, QtCore.Qt.DisplayRole, value) propItem.setToolTip(2, getPropertyValueToolTip(metaProp, value)) propTree.expandToDepth(1) propTree.headerItem() QtCore.QObject.connect( propTree, QtCore.SIGNAL("itemChanged (QTreeWidgetItem*, int)"), self.__onPropertyTreeChanged)