查看完整版本: [-- slots是什么魔法? --]

QTCN开发网 -> Qt安装与发布 -> slots是什么魔法? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

纹枰老妖 2020-09-24 13:11

slots是什么魔法?

我在学习Qt时,遇到这种代码写法:
[attachment=21929]

看到后我很纳闷:这个slots是什么关键字?于是去网上查,网友说它只是个宏定义,定义的是一个空白而已。我想既然是空白了,那我去掉这个slots,只用一个private试试,但是程序运行后,并不能展示面积,而如果加上这个slots,程序就能展示面积了。这让我想不通,所以来这里问问诸位,这个slots究竟是怎么定义的?为什么加不加它会有如此大差异

liudianwu 2020-09-24 14:08
这是Qt的精华,信号槽。

lemonzll 2020-09-24 15:42
Qt的源文件会先用moc.exe处理下,生成个moc_xxx.cpp文件。这个slots是给moc.exe看的,所以定义成空的就行了,对C++代码而言没有意义,只是标记下让moc.exe把这个函数登记下

纹枰老妖 2020-09-24 17:29
liudianwu:这是Qt的精华,信号槽。 (2020-09-24 14:08) 

我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗?

rpdhunter 2020-09-25 09:16
纹枰老妖:我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗? (2020-09-24 17:29) 

没学过Qt吧,零基础理解起来还是很有难度的,建议找本Qt书从头学起。

简单滴说,这是Qt独有的信号槽(signal-slot)机制,可以在以QObject为基类的类对象之间灵活传递数据,在头文件中signals关键字(原理是宏,但可以把它当做关键字)后面的是信号声明,slots关键字后面的是槽声明,然后在源文件中用QObject::connect()函数把信号和槽连接起来,就能使用了

rpdhunter 2020-09-25 09:19
纹枰老妖:我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗? (2020-09-24 17:29) 

具体深究moc的宏展开机制没有必要,因为这实在太复杂了,不是资深c++程序员很难看懂
对于入门级别的Qt使用者,会用这个机制就足够了

青空飞羽 2020-09-25 09:38
纹枰老妖:我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗? (2020-09-24 17:29) 

这个涉及到Qt的元编译器moc了,moc会先把signal这些Qt自己定义的关键字展开为一些标准C++代码用以实现信号/槽机制等Qt特有的特性

clickto 2020-09-25 10:22
纹枰老妖:
我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗?


首先,你要知道,signal-slot机制是qt在标准c++之上额外添加的一套元对象处理,具体的可查看在moc操作中生成的moc_xxx.cpp文件。但是相信我,作为初学者的你是不太愿意看第二遍的。比如:
定义槽函数:
[attachment=21930]
展开:不知道什么鬼:
[attachment=21931]



纹枰老妖 2020-09-25 10:48
lemonzll:Qt的源文件会先用moc.exe处理下,生成个moc_xxx.cpp文件。这个slots是给moc.exe看的,所以定义成空的就行了,对C++代码而言没有意义,只是标记下让moc.exe把这个函数登记下 (2020-09-24 15:42) 

非常感谢各位热心朋友的回复。但目前来看,2楼的答案对我最有帮助,因为鄙人比较愚笨,有些答案看的我比较糊涂,但2楼朋友的答案让我搞清楚了大概原理,尤其他的是最后一句话,画龙点睛的效果!很棒!


查看完整版本: [-- slots是什么魔法? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled