标题:求助! 关于 第二版 第317页的问题
作者:cute知道分子
日期:2018-08-01 15:27
内容:
原书第317页是一个用QMediaPlayer的类做一个简单的音乐播放器。
但是为什么Qt 5在QMediaPlayer的error信号传递参数时需要这样写?
Qt 5 的信号和槽传递参数需要强制转换么? 当然我知道Lambda表达式也可以
为什么以前的Qt 4用SIGNAL和SLOT两个宏就可以了
Qt 5 的信号和槽传递参数有好看的写法么?
#1 [ustone 08-01 19:07]
Qt Creator快速入门_第三版__霍亚飞编著.pdf
附录B2 新的信号槽语法
有讲。
#2 [dbzhang800 08-01 20:51]
如果你用的5.7或之后版本,可以 qOverload
如果你深入用过Qt4,会知道SIGNAL和SLOT这两个宏有很多坑
#3 回 ustone 的帖子 [cute知道分子 08-02 16:26]
ustone:Qt Creator快速入门_第三版__霍亚飞编著.pdf
附录B2 新的信号槽语法
有讲。 (2018-08-01 19:07)
我知道后面有讲到,但是这样的强转让人不舒服,况且我也看不懂这样的强转。转换后的返回值是什么?求解释。
#4 回 cute知道分子 的帖子 [dbzhang800 08-02 18:45]
cute知道分子:我知道后面有讲到,但是这样的强转让人不舒服,况且我也看不懂这样的强转。转换后的返回值是什么?求解释。 (2018-08-02 16:26)
信号函数存在重载,导致这个强转是让人不太舒服。但是static_cast和函数指针这种看不懂的话,是需要补补C++的课的
不过,老式的这两个宏,你觉得好理解么
# define SLOT(a) "1"#a
# define SIGNAL(a) "2"#a
#5 [ustone 08-02 21:31]
static_cast尖括号里头是类的成员函数指针类型,这个函数是有参数的,它还有一个无参数的重载函数,&QMediaPlayer::error不明确是哪个重载函数(有参或无参),只能强转一下。改成传统的SIGNAL、SLOT写法也可以。