首页| 论坛| 消息

标题:slots是什么魔法?
作者:纹枰老妖
日期:2020-09-24 13:11
内容:

我在学习Qt时,遇到这种代码写法:

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


#1 [liudianwu 09-24 14:08]
这是Qt的精华,信号槽。
#2 [lemonzll 09-24 15:42]
Qt的源文件会先用moc.exe处理下,生成个moc_xxx.cpp文件。这个slots是给moc.exe看的,所以定义成空的就行了,对C++代码而言没有意义,只是标记下让moc.exe把这个函数登记下
#3 回 liudianwu 的帖子 [纹枰老妖 09-24 17:29]
liudianwu:这是Qt的精华,信号槽。 (2020-09-24 14:08) 
我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗?
#4 回 纹枰老妖 的帖子 [rpdhunter 09-25 09:16]
纹枰老妖:我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗? (2020-09-24 17:29) 
没学过Qt吧,零基础理解起来还是很有难度的,建议找本Qt书从头学起。
简单滴说,这是Qt独有的信号槽(signal-slot)机制,可以在以QObject为基类的类对象之间灵活传递数据,在头文件中signals关键字(原理是宏,但可以把它当做关键字)后面的是信号声明,slots关键字后面的是槽声明,然后在源文件中用QObject::connect()函数把信号和槽连接起来,就能使用了
#5 回 纹枰老妖 的帖子 [rpdhunter 09-25 09:19]
纹枰老妖:我实在是想不明白,那里的slots是什么样的宏定义,能给程序带来这样的差异。可以的话,大佬您能不能把自己当成编译器,解释下这句【private slots:】在您眼里是什么样子的?我的意思是,如果那个slots真的是宏定义,您可以帮我展开让我看一下它的终极样子吗? (2020-09-24 17:29) 
具体深究moc的宏展开机制没有必要,因为这实在太复杂了,不是资深c++程序员很难看懂
对于入门级别的Qt使用者,会用这个机制就足够了

<< 1 2 >> (1/2)

回复 发表
主题 版块