Qt信号和槽(九)

重点内容:

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");

}

你可能感兴趣的:(Qt信号和槽(九))