QObject
from PyQt5.QtCore import QObject
设置属性:
QObject.__subclasses__() 返回所有子类
obj.setObjectName('ppp') 设置ObjectName
obj.objectName() 返回名称
obj.setProperty('lm',51) #给控件设置自定义属性和属性值
print(obj.property('lm')) #返回属性值
print(obj.dynamicPropertyNames()) #返回所有的属性
父子关系:
obj0 = QObject()
obj1=QObject()
obj1.setParent(obj0) #给obj1设置父对象
obj1.setParent(None) #释放父对象
print(obj1.parent()) #返回父对象地址。<PyQt5.QtCore.QObject object at 0x000000E3702D0168>
print(obj0.children()) #返回子对象地址
print(obj0.findChild(QObject)) #返回指定类型的第一个子对象或孙对象
#参数1 类型或类型元组
print(obj0.findChild(QObject,'2')) #返回指定类型,objectName为2的第一个子对象或孙对象
#参数2 objectName属性
#没找到 返回 None
print(obj0.findChild(QObject, '3',Qt.FindDirectChildrenOnly))
#参数3:
#Qt.FindChildrenRecursively=0x1 查找object的所有孩子(递归搜索)也是默认
#Qt.FindDirectChildrenOnly=0x0 查找object的直接孩子
#需要 from PyQt5.QtCore import *
print(obj0.findChildren(QObject)) #查找指定类型的所有子对象和孙对象
del self.obj1 #删除对象
【删除栈中的对象名,而堆中实际空间没有删除,堆中的实际空间还可以被其它对象引用比如父子关系】
obj.deleteLater() 删除对象,堆中的实际空间也释放了
不会马上删除,它发出一个删除event,主循环接收到删除event后才删除
父对象被销毁后,子对象也就销毁了
print(i.isWidgetType()) #判断对象是不是控件
print(i.inherits('QWidget')) #判断对象i是不是继承于QWidget类;是返回True
信号:
obj2.destroyed.connect(lambda :print('obj2被销毁')) 在对象obj2被销毁之前立即发出,不能被阻止
会向槽函数传递一个对象参数【不知道是哪个对象???】
obj2.objectNameChanged.connect() #在objectName发生变化时发出信号
会向槽函数传递一个字符串参数,就是刚刚修改的objectName的名称
obj2.objectNameChanged.disconnect() #取消信号与槽函数的连接
obj2.blockSignals(True) #临时阻断信号与槽函数的连接
False 恢复连接
bool=obj2.signalsBlocked() #判断信号是否被临时阻断;Ture被阻断
s=obj2.receivers(obj2.objectNameChanged) #返回指定对象指定信号连接了几个槽函数
重写消息分发函数:
from PyQt5.QtWidgets import QApplication, QWidget,QLabel,QPushButton
from PyQt5.QtCore import *
import sys class win(QWidget): #创建一个类,为了集成控件
def __init__(self):
super(win, self).__init__()
self.setWindowTitle('窗口标题')
self.resize(200,200)
self.setup_ui()#控件布局函数 def setup_ui(self): #控件布局
#label = QLabel('标签控件', self)
button = QPushButton('按钮', self)
#label.move(10, 10)
button.move(70, 150)
button.pressed.connect(self.a) def a(self):
print('按钮被点击了') class App(QApplication):
def notify(self, rec, evt) : #重写消息分发函数。参数rec保存消息接收对象,参数evt保存消息事件
if rec.inherits('QPushButton') and evt.type()==QEvent.MouseButtonPress:
#rec.inherits('QPushButton') rec继承于QPushButton
print(rec, evt) return super().notify(rec, evt) #执行父类QApplication的消息分发函数 if __name__=='__main__': app=App(sys.argv) #创建应用 window=win() window.show() sys.exit(app.exec_())
QEvent参考:https://www.cnblogs.com/findumars/p/8076247.html
重写按钮事件函数:
from PyQt5.QtWidgets import QApplication, QWidget,QLabel,QPushButton
from PyQt5.QtCore import *
import sys class Btn(QPushButton):
def event(self, evt): #重写按钮事件函数
if evt.type()==QEvent.MouseButtonPress:
print(evt)
return super().event(evt)
def mousePressEvent(self, evt): #重写按钮的鼠标按下事件
print('鼠标按下了。。。。。。')
return super().mousePressEvent(evt) class win(QWidget): #创建一个类,为了集成控件
def __init__(self):
super(win, self).__init__()
self.setWindowTitle('窗口标题')
self.resize(200,200)
self.setup_ui()#控件布局函数 def setup_ui(self): #控件布局
#label = QLabel('标签控件', self)
button = Btn('按钮', self)
#label.move(10, 10)
button.move(70, 150)
button.pressed.connect(self.a) def a(self):
print('按钮被点击了') if __name__=='__main__':
app=QApplication(sys.argv) #创建应用
window=win()
window.show()
sys.exit(app.exec_())
QObject的更多相关文章
- Qt - 错误总结 - QObject::connect: Cannot queue arguments of type 'PVCI_CAN_OBJ' (Make sure 'PVCI_CAN_OBJ' is registered using qRegisterMetaType().)
背景:一个线程通过signal-slot发送PVCI_CAN_OBJ类型的值到主线程中, 错误提示: QObject::connect: Cannot queue arguments of type ...
- Qt::QObject类
QObject 类是Qt 所有类的基类. QObject是Qt对象模型的核心.这个模型的中心要素就是一种强大的叫做信号与槽无缝对象沟通机制.你可以用 connect()函数来把一个信号连接到槽,也可以 ...
- Qt:QObject translate
qobject类是qt所有对象的基类. QObject是Qt的核心对象模型.中心在这个模型是一个非常强大的无缝沟通对象称为信号与槽机制.你可以连接一个信号槽连接()和破坏的连接与断开连接().为了避免 ...
- Qt QObject
[1]Qt的QObject 1.测试代码如下: #include<QApplication> #include<QPushButton> #include<QDebug& ...
- QObject::deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象 good
程序编译运行过程很顺利,测试的时候也没发现什么问题.但后来我随手上传了一个1G大小的文件,发现每次文件上传到70%左右的时候程序就崩溃了,小文件就没这个问题.急忙打开任务管理器,这才发现上传文件的时候 ...
- Qt使用一个事件队列对所有发出的事件进行维护(QObject的event()函数相当于dispatch函数),用EventLabel 继承QLabel作为例子(简单明了) good
事件(event)是由系统或者 Qt 本身在不同的时刻发出的.当用户按下鼠标.敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件.一些事件在对用户操作做出响应时发出,如键盘事件等:另一些事 ...
- 深入了解Qt(一)之QObject
深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! QObject这个 class 是 QT 对象模型的核心,关于对象模型可以阅读C++对象模型详解 ...
- 利用QObject反射实现jsonrpc
1.jsonrpc请求中的params数组生成签名 static QString signatureFromJsonArray(const QJsonArray &array) { QStri ...
- Qt源码分析之QObject
原文:http://blog.csdn.net/oowgsoo/article/details/1529284 我感觉oowgsoo兄弟写的分析相当透彻,赞! 1.试验代码: #include < ...
- Qt 静态函数QMetaObject::connectSlotsByName(QObject * object)按命名规则自动connect,不需要手动connect
看别人代码看到void on_MyWidget_slotTest(); 就郁闷了,没看到他代码里有connect 却能把信号和槽可以连接起来. 今日回顾书本发现该函所的nb之处. QMetaObjec ...
随机推荐
- 让Mac 可以使用mysql -u用户直接连接数据库
在执行完安装版本的mysql数据库后,会发现执行mysql还是会出现 command not found的错误:解决方案 方案1.设置软连接到/usr/local/bin下在命令行下输入如下 ln - ...
- hdu2795(线段树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2795 题目大意:有一个h*w的公告牌,要在其上贴公告.现在有n个公告,每个公告的尺寸为1*wi,即高度 ...
- Kafka学习之路
一直在思考写一些什么东西作为2017年开篇博客.突然看到一篇<Kafka学习之路>的博文,觉得十分应景,于是决定搬来这“他山之石”.虽然对于Kafka博客我一向坚持原创,不过这篇来自Con ...
- js 正则表达式的使用(标志 RegExp exec() test() compile() $1...$9)
一,标志 g (global,全局匹配标志) 执行正则表达式匹配或替换时,一般只要搜索到一个符合的文本就停止匹配或替换.使用该标志将搜索所有符合的文本直到文本末尾. i (ignoreCase,忽略大 ...
- JDK和CGLIB动态代理区别
背景:虽然自己了解这两种代理的区别,但是面试时候还是答的很模糊,需要好好总结. 前言JDK动态代理实现原理(jdk8):https://blog.csdn.net/yhl_jxy/article/de ...
- (转)每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
背景:在redis集群中,有关于一致性哈希的使用. 一致性哈希:桶大小0~(2^32)-1 哈希指标:平衡性.单调性.分散性.负载性 为了提高平衡性,引入“虚拟节点” 每天进步一点点——五分钟理解一致 ...
- linux 系统调用之文件操作
fcntl 文件控制 open 打开文件 creat 创建新文件 close 关闭文件描述字 read 读文件 write 写文件 readv 从文件读入数据到缓冲数组中 writev 将缓冲数组里的 ...
- 20165232第4次实验《Android程序设计》实验报告
20165232第4次实验<Android程序设计>实验报告 一.实验报告封面 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:何彦达 学号:20165232 指导教师: ...
- docker-compose 案例
官网示例: 安装wordpress version: " services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql r ...
- Linux进程和任务管理
process 进程 进程-线程等 Job 前台--后台: 后台任务"与"前台任务"的本质区别只有一个:是否继承标准输入 联机--脱机 -以及crontab 脱机管理主要 ...