重点内容:
QObjiect派生,调用QObject::connect
Q_OBJECT SIGNAL SLOT
signals slots
1)连接信号和槽,参数需要一致
2)信号可以连接很多槽,当信号发射时,所有槽函数都被调用,但顺序不确定
3)一个槽可以被很多信号连接
4)信号可以连接信号
5)信号默认访问权限是protect
6)信号的参数可以比槽多,但是相对应的部分必须一致,不建议设置成那样
7)信号函数和槽函数都可以重载
8)信号函数和槽函数都可以有默认参数
9)在QT中,学习一个类,首先要知道这个类的功能,了解他的信号和槽函数,公共函数和属性
添加两个基于QObject的类,一个叫Student,一个叫Teacher,一个main.cpp文件
头文件:
Teacher.h源代码
#ifndef TEACHER_H
#define TEACHER_H
#include <QObject>
class Teacher : public QObject
{
Q_OBJECT
public:
parent
signals:
public slots:
strQuestion
};
#endif // TEACHER_H
Student.h源代码
#ifndef STUDENT_H
#define STUDENT_H
#include <QObject>
class Student : public QObject //要使用信号和槽函数都要从Object派生
{
Q_OBJECT //开头必须要有Q_OBJECT 这个宏
public:
parent
strQuestion
signals: //信号必须要有signals区别
strQuestion
public slots: //槽函数必须写在这个保留字下面
};
#endif // STUDENT_H
源文件:
Teacher.cpp
#include "teacher.h"
#include <QDebug>
Teacher::Teacher(QObject *parent) :
QObject(parent)
{
}
void Teacher::answer(QString strQuestion)
{
if(strQuestion =="where are you")
{
qDebug()<<"beijing";
}
else
{
qDebug()<<"unknow";
}
}
Student.cpp
#include "student.h"
Student::Student(QObject *parent) :
QObject(parent)
{
}
void Student::ask(QString strQuestion)
{
emit sigAsk(strQuestion);//emit表示在发射信号
}
main.cpp
#include <QDebug>
#if 0
Student
Teacher
{
public:
askedquestionStudents
replyquestionanswerStudents
};
Student
{
public:
askquestionTeachert
repliedquestionanswerTeachert
};
StudentaskquestionTeachert
{
taskedquestion
}
StudentrepliedquestionanswerTeachert
{
qDebug
}
TeacheraskedquestionStudents
{
question
{
replyquestions
}
question
{
replyquestions
}
else
{
replyquestions
}
}
TeacherreplyquestionanswerStudents
{
srepliedquestionanswer
}
#endif
/*
QObjiect派生,调用QObject::connect
Q_OBJECT SIGNAL SLOT
signals slots
1)连接信号和槽,参数需要一致
2)信号可以连接很多槽,当信号发射时,所有槽函数都被调用,但顺序不确定
3)一个槽可以被很多信号连接
4)信号可以连接信号
5)信号默认访问权限是protect
6)信号的参数可以比槽多,但是相对应的部分必须一致,不建议设置成那样
7)信号函数和槽函数都可以重载
8)信号函数和槽函数都可以有默认参数
9)在QT中,学习一个类,首先要知道这个类的功能,了解他的信号和槽函数,公共函数和属性
*/
#include <QApplication>
#include "teacher.h"
#include "student.h"
int main(int argc,char * argv[])
{
Student s;
Student s1;
sigAsksigAsk
Teacher t;
Teacher t1;
sigAskanswer
sigAskanswer
answer
s1.ask("where are you");
}