栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT从入门到实战x篇

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QT从入门到实战x篇

上篇QT从入门到实战x篇_06_信号和槽2:自定义信号和槽函数的创建及使用介绍了自定义信号和槽的创建及使用方法,本篇将会介绍自定义信号及槽的重载。

关于重载请参考之前文章:C++57个入门知识点_12 函数重载及其条件(函数重载:同一作用域中有多个同名函数、条件:(1)函数名相同(2)参数个数不同、类型不同、顺序不同(3)返回值和调用约定不考虑(4)作用域相同);
C++57个入门知识点_13 函数重载调用规则及本质(编译器会按照匹配程度来决定调用哪个函数,最匹配的优先调用,而经过名称粉碎之后,其实不同的同名函数是存在差异的)

上篇下课后 老师触发信号 饿了 学生响应信号 请客吃饭,但是并没有明确指出老师饿了要吃什么饭,此处对teacher.h中的信号进行重载,介绍带参数的信号和槽的使用和将QString转换为Char*的结果。

1. 带参数的信号
在 teacher类中定义信号函数, teacher.h中的内容:

signal:
void hungry(QString foodName);

2. 带参数的槽函数
在 student类中定义信号函数, student.h中的进行声明:

public:
    void treat(QString foodName);

使用“alt+回车”快捷键创建实现

student.cpp中:

#include "student.h"
#include 

Student::Student(QObject *parent) : QObject(parent)
{

}

void Student::treat()
{
    qDebug()<
     qDebug()< 

3. 连接带参数的信号和槽
在widget.cpp中:利用函数指针指向函数地址,函数指针定义时写明参数。

函数指针部分参考:C语言基础入门48篇_38_函数指针与typedef(函数指针即指向函数的指针、函数指针定义int (*pfn)(int)、typedef给数据类型起别名,起到的作用一致、typedef简化函数指针)

    //函数指针指向函数地址
    void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
    void(Student::*studentSlot)(QString)=&Student::treat;
    connect(zt,teacherSignal,st,studentSlot);
#include "widget.h"
#include "ui_widget.h"
#include "teacher.h"
#include "student.h"

//Teacher类 老师类
//Student类 学生类
//场景:下课后 老师触发信号 饿了 学生响应信号 请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建老师对象
    zt=new Teacher(this); //this用来指定父亲的对象
    //创建学生对象
    st=new Student(this);

    //老师饿了 学生请客连接
//    connect(zt,&Teacher::hungry,st,&Student::treat);

    //函数指针指向函数地址
    void(Teacher::*teacherSignal)(QString)=&Teacher::hungry;
    void(Student::*studentSlot)(QString)=&Student::treat;
    connect(zt,teacherSignal,st,studentSlot);


    //调用下课函数
    classIsOver();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::classIsOver()
{
    //下课函数 调用后 触发老师饿了的信号
    emit zt->hungry(QString::fromLocal8Bit("宫保鸡丁"));
}

运行结果:

4. 将QString转换为Char*
上面程序在做输出时,由于输出的数据类型为 QString,因此会带着 双引号输出,可以通过将其转换为 char*进行输出,就不会带双引号。对应的

在student.cpp的槽函数中

void Student::treat(QString foodName)
{
    //QString转char*,先转为QByteArray(.toUtf8()),再转为char*(.data())
    qDebug()< 

运行结果:

5.学习视频地址:QT从入门到实战x篇_07_自定义信号及槽的重载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931795.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号