在hiero.ui中经常会通过hiero.ui.windowManager().windows()来获取当前QMainWindow中的QWidget子窗口,而这些子窗口是以实例对象的方式返回的,如果想具体调用某一个实例对象,就需要知道具体的类名及实例名,以防使用错误。
下面给出一段代码来获取类名及实例名:
#!/usr/bin/env python # -*- coding: utf-8 -*- import hiero.ui from PySide import QtGui, QtCore # get application name. print QtGui.QApplication.instance().applicationName() for i in QtGui.QApplication.instance().children(): # get class name. print i.metaObject().className() # get instance name. print i.objectName() for i in hiero.ui.windowManager().windows(): # get exsiting windows class name. print 'className ', i.metaObject().className() # get exsiting windows name. print 'objectName ', i.objectName()
实际上,QObject多重继承了QMetaObject等对象。QObject中存在metaObject()这样一个方法来获取QMetaObject实例对象,该对象中便记录了QObject对象的一些基本元属性。QMetaObject::className()便可获取继承了QObject实例对象的类名。
通过QObject::objectName()又可以获取实例对象名称。
QtGui.QApplication.instance().applicationName()获取的则是当前运行的QApplication实例名称。
最近为了写一个数据传输应用,认真看了Qt的文档和源码,初窥了Qt的底层设计机制;又详细看了关于OSI参考模型的设计思路,对网络传输的各方面细节也有了大致的认识,基础知识很重要,补足了这类知识后,应用也会写的很扎实。