Qt-Day05-学习笔记

巩固信号和槽

1.标准的信号和槽

connect:
Qt-Day05-学习笔记

  • 参数1: 信号的发送者;
  • 参数2: 发送的信号;
  • 参数3: 信号的接收者;
  • 参数4: 接收信号后调用的槽函数.
#include "mainwindow.h"
#pragma execution_character_set("utf-8")

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //this 指向 w对象的指针
    this->setWindowTitle("标准的信号和槽");
    resize(600,600);
    pBtn1 = new QPushButton(this);
    pBtn1->setText("开始");
    pBtn2 = new QPushButton(this);
    pBtn2->setText("结束");
    pBtn2->move(200,200);

    //注册   信号发送者;发送标准信号,信号接收者(main.cpp里的w对象),自定义的槽函数
    connect(pBtn1,&QPushButton::pressed,this,&MainWindow::changeBtnText);
}

MainWindow::~MainWindow()
{

}

void MainWindow::changeBtnText()
{
    pBtn2->setText("^o^");
}

Qt-Day05-学习笔记

2. 自定义信号

做两个窗口,父窗口和子窗口;
父窗口上有一个按钮;
子窗口上也有一个按钮;
点击父窗口上面的按钮,切换到子窗口;点击子窗口上面的按钮,切换到父窗口.

emit 信号(); //发送信号

#include "mainwindow.h"
#include <QDebug>
#pragma execution_character_set("utf-8")

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle("父窗");
    resize(500,500);
    pBtn = new QPushButton(this);

    pBtn->setText("切换到子窗口");

    pChildWnd = new childmanwindow;

    connect(pBtn,&QPushButton::pressed,this,&MainWindow::hidThisAndShowChild);


    /*------------------------------------------------------------------------------------------*/
    //Qt4版本的信号和槽的写法
    connect(pChildWnd,SIGNAL(mySignal()),this,SLOT(handChild()));

    connect(pChildWnd,SIGNAL(mySignal(QString,int)),this,SLOT(handChildSignal(QString,int)));
}

MainWindow::~MainWindow()
{

}

void MainWindow::hidThisAndShowChild()
{
    //显示子窗口
    pChildWnd->show();
    //隐藏当前窗口
    this->hide();
}

void MainWindow::handChild()
{
    qDebug() << "无参的槽函数" << endl;
    //显示父窗口
    this->show();
    //隐藏之窗口
    pChildWnd->hide();
}

void MainWindow::handChildSignal(QString str,int n)
{
    qDebug() << "带参的槽函数" << endl;
    qDebug() << str << ":" << n <<endl;
    //显示父窗口
    this->show();
    //隐藏子窗口
    pChildWnd->hide();
}

#include "childmanwindow.h"

childmanwindow::childmanwindow(QWidget *parent) : QMainWindow(parent)
{
    setWindowTitle("子窗");
    resize(500,500);
    pBtn = new QPushButton(this);
    pBtn->setText("切换到父窗口");

    connect(pBtn,&QPushButton::pressed,this,&childmanwindow::mySlot);

}

void childmanwindow::mySlot()
{
    //发信号
    emit mySignal();
    emit mySignal("测试",666);
}

Qt-Day05-学习笔记Qt-Day05-学习笔记

3. lambda表达式

C++11中的lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.
Lamdba表达式的基本构成:

[函数对象参数](操作符重载函数参数)mutable ->返回值{函数体}

[capture](parameters) mutable ->return-type
{
statement
}

[]把当前的区域的一些内容传递到lambda表达式的{}里面.

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle("lambda");
    resize(500,500);
    QPushButton* pBtn1 = new QPushButton(this);
    QPushButton* pBtn2 = new QPushButton(this);

    pBtn1->setText("你好");
    pBtn1->move(200,200);
    pBtn2->setText("我好");

    connect(pBtn2,&QPushButton::pressed,this,&MainWindow::mySlot);


    connect()
    connect(pBtn1,&QPushButton::pressed,[pBtn2](){
        qDebug() << "点击 你好 按钮" << endl;
        if(pBtn2->text() == "你好")
            pBtn2->setText("大家都好");
        else
            pBtn2->setText("我好");
    });
}

MainWindow::~MainWindow()
{

}

void MainWindow::mySlot()
{
    qDebug() << "点击 ---我好--- 按钮" << endl;
}

Qt-Day05-学习笔记

上一篇:WPF添加类库并引用


下一篇:关于fasterxml-jackson发生Can not deserialize instance of异常原因验证