QT 5 新语法之信号重载问题

QT 4 Q T   4 中,关联信号和槽比较常用的是(这里信号用 valueChanged() v a l u e C h a n g e d ( ) ,槽用 setValue() s e t V a l u e ( ) 演示):

connect(sender, SIGNAL(valueChanged(int)), receiver, SLOT(setValue(int)));

这里使用的 SIGNAL S I G N A L SLOT S L O T 是可以将参数转换为字符串的两个宏,但是这里存在两个问题——没有编译期检查和无法使用相容类型的参数,所以在 QT 5 Q T   5 中提供了新的信号槽语法(因为向下兼容,所以旧的语法也是可以用的)。

前面演示的关联用 QT 5 Q T   5 的新语法写如下:

connect(sender, &Sender::valueChanged, receiver, &Receiver::setValue);

这里, Sender S e n d e r sender s e n d e r 对象的类型, Receiver R e c e i v e r receiver r e c e i v e r 对象的类型。

这样写不止解决了上述的问题,还允许链接到任意函数。不过这样也引入了一些坑,新手(比如说我)在使用新语法的时候总会在编译期报如下类似错误(支持编译期检查的优点这么快就体现出来了 /(o)/~~ /(ㄒoㄒ)/~~

这里提示没有匹配到这个函数,没有匹配到的原因是因为第二个参数没有解释清楚重载类型……其实这是因为信号重载产生了歧义导致的,在旧的语法中,因为会指定参数类型,所以不会出现这个问题,但是在新的语法中并没有指定参数类型,所以遇见重载时就栽了。

报错中显示我用的的 QSpinBox Q S p i n B o x ,而这个类中定义了两个名字叫 valueChanged v a l u e C h a n g e d 的信号:

void valueChanged(int);
void valueChanged(const QString &);

所以我们需要在使用的时候指定清楚调用哪个重载的信号,这时候就轮到 static_cast<>() s t a t i c _ c a s t <> ( ) 出场了!

首先我们先看一下上述错误代码如何修改:

connect(ui->spinBox, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, &TimeLine::SendSignalsFrameChanged);

其次,我们来说一下 static_cast<>() s t a t i c _ c a s t <> ( ) ,这是一个强制转换的函数,原型是:

static_cast<type-id>(expression)

功能是将 expression e x p r e s s i o n 强制转换为 typeid t y p e − i d 类型,但是它没有运行时类型检查来保证转换的安全性。

具体其他用法可以参考 《百度百科: static_cast s t a t i c _ c a s t ……

所以在使用这个函数转换以后,便可以明确表明 valueChanged v a l u e C h a n g e d 信号使用的是哪个重载,问题也随之解决。

全部评论

相关推荐

测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
避坑恶心到我了大家好,今天我想跟大家聊聊我在成都千子成智能科技有限公司(以下简称千子成)的求职经历,希望能给大家一些参考。千子成的母公司是“同创主悦”,主要经营各种产品,比如菜刀、POS机、电话卡等等。听起来是不是有点像地推销售公司?没错,就是那种类型的公司。我当时刚毕业,急需一份临时工作,所以在BOSS上看到了千子成的招聘信息。他们承诺无责底薪5000元,还包住宿,这吸引了我。面试的时候,HR也说了同样的话,感觉挺靠谱的。于是,我满怀期待地等待结果。结果出来后,我通过了面试,第二天就收到了试岗通知。试岗的内容就是地推销售,公司划定一个区域,然后你就得见人就问,问店铺、问路人,一直问到他们有意向为止。如果他们有兴趣,你就得摇同事帮忙推动,促进成交。说说一天的工作安排吧。工作时间是从早上8:30到晚上18:30。早上7点有人叫你起床,收拾后去公司,然后唱歌跳舞(销售公司都这样),7:55早课(类似宣誓),8:05同事间联系销售话术,8:15分享销售技巧,8:30经理训话。9:20左右从公司下市场,公交、地铁、自行车自费。到了市场大概10点左右,开始地推工作。中午吃饭时间大约是12:00,公司附近的路边盖饭面馆店自费AA,吃饭时间大约40分钟左右。吃完饭后继续地推工作,没有所谓的固定中午午休时间。下午6点下班后返回公司,不能直接下班,需要与同事交流话术,经理讲话洗脑。正常情况下9点下班。整个上班的一天中,早上到公司就是站着的,到晚上下班前都是站着。每天步数2万步以上。公司员工没有自己的工位,百来号人挤在一个20平方米的空间里听经理洗脑。白天就在市场上奔波,公司的投入成本几乎只有租金和工资,没有中央空调。早上2小时,晚上加班2小时,纯蒸桑拿。没有任何福利,节假日也没有3倍工资之类的。偶尔会有冲的酸梅汤和西瓜什么的。公司的晋升路径也很有意思:新人—组长—领队—主管—副经理—经理。要求是业绩和团队人数,类似传销模式,把人留下来。新人不能加微信、不能吐槽公司、不能有负面情绪、不能谈恋爱、不能说累。在公司没有任何坐的地方,不能依墙而坐。早上吃早饭在公司外面的安全通道,未到上班时间还会让你吃快些不能磨蹭。总之就是想榨干你。复试的时候,带你的师傅会给你营造一个钱多事少离家近的工作氛围,吹嘘工资有多高、还能吹自己毕业于好大学。然后让你早点来公司、无偿加班、抓住你可能不会走的心思进一步压榨你。总之,大家在找工作的时候一定要擦亮眼睛,避免踩坑!———来自网友
qq乃乃好喝到咩噗茶:不要做没有专业门槛的工作
点赞 评论 收藏
分享
07-03 11:02
中山大学 C++
字节刚oc,但距离九月秋招很近了有两段互联网实习,非腾讯字节。不敢赌转正,现在在纠结去还是不去如果实习俩月离职会有什么后果吗
阿城我会做到的:不去后悔一辈子,能否转正取决于ld的态度,只要他不卡,答辩就是走流程,个人觉得可以冲一把
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务