Qt学习笔记1(二)

简介: Qt学习笔记1


 5.信号与槽:

信号与槽机制介绍:


优点:松散耦合,信号发出短端和接受端可以毫无关联,如果要关联需要connect函数。


(2)connect函数使用:


connect(信号发出者,信号,信号接收着,槽函数)


connect(sender,signal,receiver,slot)

信号:

点击信号,按下信号,抬起信号,切换信号;


槽函数:


很多,查找qt助手

MYbutton *butten3=new MYbutton;
    butten3->setParent(this);
    butten3->setText("关闭");
    butten3->move(300,100);
    butten3->setFixedSize(100,100);
    connect(butten3,&QPushButton::clicked,this,&Widget::close);
    butten3->show();

当butten3,发生clicked,this执行close;


(2)自定义信号与槽:


步骤一:确定场景:


天黑了-------->我想你了


有人开门--------->开门


步骤二:添加天黑类和想你类


步骤三:在天黑类声明信号,想你类中声明并实现槽函数;


tianhei.h


void tianhei();  必须是void,可以有参数,不需要实现只声明,可以重载;

#ifndef TIANHEI_H
#define TIANHEI_H
#include <QObject>
class Tianhei : public QObject
{
    Q_OBJECT
public:
    Tianhei();
signals:
    void tianhei();     //声明信号,不需要实现;
public slots:
};
#endif // TIANHEI_H

xiangni.h

void xiangni()

void xiangni()声明槽函数,

#ifndef XINGNI_H
#define XINGNI_H
#include <QObject>
class Xingni : public QObject
{
    Q_OBJECT
public:
    explicit Xingni(QObject *parent = nullptr);
signals:
public slots:
    void xiangni();   //声明槽函数
};
#endif // XINGNI_H

xiangni.cpp

#include "xingni.h"
#include <QDebug>
Xingni::Xingni(QObject *parent) : QObject(parent)
{
}
void Xingni::xiangni(){   //实现槽函数
    qDebug()<<"想你了";
}

步骤四:穿建天黑对象和想你对象;


mainwindow.h  定义

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "xingni.h"
#include "tianhei.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    Xingni *xing;
    Tianhei *hei;
    void heilai();     //函数声明
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->hei =new Tianhei();  //实例化对象,注意后面括号
    this->xing =new Xingni();
    connect(hei,&Tianhei::tianhei,xing,&Xingni::xiangni);
    //天黑发出天黑信号,xing接收,调用槽函数;
    heilai();   //调用函数发出信号;
}
void MainWindow::heilai(){
     qDebug()<<"天要黑了!";
    emit hei->tianhei();  //发出信号;
}
MainWindow::~MainWindow()
{
    delete ui;
}


  6,信号与信号连接;


上面我们实现了天黑想你的操作,那么我现在需要点击一个按钮让其天黑然后想你呢,有两种实现方式:


(1)两个信号与槽:


建立一个按钮,点击按钮时,this会接收信号,然后调用heilai()函数,heilai()函数会发送hei信号,xing接收,调用槽函数;

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("love");
    //设置固定大小,设置完成不可拉伸
    this->setFixedSize(400,300);
    QPushButton *butten=new QPushButton("点我天黑",this);
    butten->move(150,100);
    //定义一个按钮实例子
    this->hei =new Tianhei();  //实例化对象,注意后面括号
    this->xing =new Xingni();
    connect(butten,&QPushButton::clicked,this,&MainWindow::heilai);
    connect(hei,&Tianhei::tianhei,xing,&Xingni::xiangni);
    //天黑发出天黑信号,xing接收,调用槽函数;
}
void MainWindow::heilai(){
     qDebug()<<"天要黑了!";
    emit hei->tianhei();
}
MainWindow::~MainWindow()
{
    delete ui;
}


每次点击天黑,都会调用一次heiilai()函数和xiangni()函数;


(2)信号与信号连接;

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("love");
    //设置固定大小,设置完成不可拉伸
    this->setFixedSize(400,300);
    QPushButton *butten=new QPushButton("点我天黑",this);
    butten->move(150,100);
    //定义一个按钮实例子
    this->hei =new Tianhei();  //实例化对象,注意后面括号
    this->xing =new Xingni();
//    connect(butten,&QPushButton::clicked,this,&MainWindow::heilai);
    connect(butten,&QPushButton::clicked,hei,&Tianhei::tianhei);
//信号与信号连接,点击信号触发后触发天黑信号,不需要函数中转
    connect(hei,&Tianhei::tianhei,xing,&Xingni::xiangni);
    //天黑发出天黑信号,xing接收,调用槽函数;
}
void MainWindow::heilai(){
     qDebug()<<"天要黑了!";
    emit hei->tianhei();
}
MainWindow::~MainWindow()
{
    delete ui;
}


信号与信号连接不需要函数中转,以此不会调用heilai()函数;

相关文章
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
52 4
【Qt 学习笔记】Qt窗口 | 标准对话框 | 消息对话框QMessageBox
|
11天前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
36 4
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
71 4
|
11天前
|
数据安全/隐私保护
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
【Qt 学习笔记】Qt窗口 | 对话框 | 模态与非模态对话框的创建
24 4
|
11天前
|
搜索推荐 C++
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
【Qt 学习笔记】Qt窗口 | 对话框 | 创建自定义对话框
15 4
|
11天前
|
API UED
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
【Qt 学习笔记】Qt窗口 | 状态栏 | QStatusBar的使用及说明
35 4
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
24 3
|
11天前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
25 3
|
11天前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 颜色对话框QColorDialog
50 3
|
11天前
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
【Qt 学习笔记】Qt窗口 | 对话框 | Qt对话框的分类及介绍
26 3