怎样更换网站模板,网站详情页怎么做的,庆阳亚衡设计,上海3d建模培训学校第二天
2.1自定义信号和槽
新建一个Qtclass 自定义信号#xff1a;返回值是void #xff0c;只需要声明#xff0c;不需要实现#xff0c;可以有参数#xff0c;可以重载
自定义槽#xff1a;返回值void #xff0c;需要声明#xff0c;也需要实现#xff0c;可以有…第二天
2.1自定义信号和槽
新建一个Qtclass 自定义信号返回值是void 只需要声明不需要实现可以有参数可以重载
自定义槽返回值void 需要声明也需要实现可以有参数可以发生重载
首先新建学生和老师的类。在老师的头文件中添加自定义信号,将代码写在signals:下来实现自定义信号只需要声明不需要实现
class Teacher : public QObject
{Q_OBJECT
public:Teacher(QObject *parent);~Teacher();
//自定义信号写到signals下
//返回值是void 只需要声明不需要实现
//可以有参数可以重载
signals:void hungry();
};在学生类里定义槽返回值void 需要声明也需要实现可以有参数可以发生重载。
class Student : public QObject
{
public:Student(QObject *parent);~Student();
public slots://返回值void 需要声明也需要实现//可以有参数可以发生重载void treat();
};void Student::treat()
{qDebug(请老师吃饭);
}现在weidet头文件里新建老师和学生的指针在到cpp里把他们实例化绑定到父类加入对象树并且使用connect进行连接。光有连接还不行必须要先连接在调用需要调用的时机使用emit来定义触发的时机。写完后就能在输出里看到打印了这段文字。
#include QtWidgets/QWidget
#include ui_widget.h
#include Teacher.h
#include Student.hclass widget : public QWidget
{Q_OBJECT
public:widget(QWidget *parent nullptr);~widget();
private:Ui::widgetClass ui;//先申明两个指针Teacher* te;Student* st;//声明调用函数void classisover();
};#include widget.hwidget::widget(QWidget *parent): QWidget(parent)
{ui.setupUi(this);//创建一个老师对象,右边的this是设置父类加入对象树this-te new Teacher(this);//创建一个学生对象this-st new Student(this);//搭建连接要先连接在传递信号connect(te,Teacher::hungry,st,Student::treat);classisover();
}widget::~widget()
{}void widget::classisover()
{//下课函数调用后出发老师饿了的信号emit te-hungry();
}2.2 重载信号和槽
在老师头文件重载hungry函数为void hungry(QString foodname)信号只需要声明不需要实现。
在学生头文件重载 treat 函数并实现食物名。后边加toUtf8().data()是因为不加的话字符串输出有引号
void Student::treat(QString foodname)
{//QString - char *先砖成QByteArray(.toutf8())再转char * (.data())qDebug()请老师吃饭foodname.toUtf8().data();
}此时需要修改调用函数加入食物名称connect找不到该连接的函数应为没有指定哪个重载。需要用下边的方式来使用函数指针指向你想连接的函数重载
//连接到带参数的信号和槽
//函数指针指向函数地址
void (Teacher:: *teacherSignal)(QString) Teacher::hungry;
void (Student:: *studentSlot)(QString) Student::treat;connect(te, teacherSignal, st, studentSlot);
classisover();void widget::classisover()
{//下课函数调用后出发老师饿了的信号emit te-hungry(gongbaojiding);
}2.3 信号连接信号
1、信号是可以连接信号
2、一个信号可以连接多个槽函数
3、多个信号可以连接同一个槽函数
4、信号和槽函数的参数必须类型——对应
5、信号和槽的参数个数﹑是不是要一致?信号的参数个数可以多余槽函数的参数个数按钮的点击是bool一个参数所以只能用空的函数重载去连接信号
还可以使用按钮来触发这个信号点击就会触发
//点击一个按钮下课
QPushButton* btn new QPushButton(下课,this);
this-resize(600,400);//点击按钮下课
connect(btn,QPushButton::clicked,this,widget::classisover);
使用信号连接信号无参信号和槽连接相当于点击信号触发老师信号老师信号又触发学生请客的信号三者关联起来了 //无参信号和槽连接
//连接到带参数的信号和槽
//函数指针指向函数地址
void (Teacher:: * teacherSignal)(void) Teacher::hungry;
void (Student:: * studentSlot)(void) Student::treat;
connect(te, teacherSignal, st, studentSlot);//信号连接信号
connect(btn, QPushButton::clicked, te, teacherSignal);2.4 lambda表达式
5.4版本之前要使用Lambda,需要在.pro文件处添加这么一行代码CONFIG C11\