QT学习笔记(一)

软件:Qt creator 5.15版本
qt:界面显示两个按钮,只在main.cpp里添加代码,其他文件不变

#include "mainwindow.h"
#include <QWidget>
#include <QPushButton>
#include <QApplication>

int main(int argc, char *argv[])
{
    //应用程序对象,在qt中应用程序对象有且只有一个
    QApplication a(argc, argv);
    //窗口对象
    MainWindow w;
    //窗口对象,默认不会显示,必须要调用show的方法显示
    w.setWindowTitle(QString("主要看气质"));//设置标题


        QPushButton b;
        b.setText("^_^");//给按钮设置内容
        b.setParent(&w);
        b.move(100,100);
        //指定父类对象
        //1、setParent
        //2、通过构造函数传参
         //让程序对象进入循环

        QPushButton b1(&w); //2、通过构造函数传参
        b1.setText("abc");
        w.show();
    return a.exec();
}

自定义槽函数
在.h里面定义两个按钮,和一个槽函数声明

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void mysolt();//槽函数声明
private:
    Ui::MainWindow *ui;
    QPushButton b1;//按钮1
    QPushButton *b2;//按钮2
};
#endif // MAINWINDOW_H

在mainwindow.cpp里进行按钮操作

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    b1.setParent(this);
    b1.setText("close");
    b1.move(100,100);

    b2=new QPushButton(this);
    b2->setText("abc");

    connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
    /*
     &b1:信号发出者,指针类型
     &QPushButton: :pressed:处理的信号,&发送者的类名::信号名字*
     this:信号接收者
     &Mainwidget : :close:槽函数,信号处理函数﹑&接收的类名:∵:槽函数名字
*/
    /*自定义槽,普通函数的用法
    * Qt5:任意的成员函数,普通全局函数,静态函数
    * 槽函数需要和信号一致(参数,返回值)
      由于信号都是没有返回值,所以,槽函数一定没有返回值*/

    connect(b2, &QPushButton::released,this, &MainWindow::mysolt);
    connect(b2, &QPushButton::released,&b1, &QPushButton::hide);
}

void MainWindow::mysolt()
{
    b2->setText("123");
}

MainWindow::~MainWindow()
{
    delete ui;
}


两个窗口跳转,在项目添加新文件
在这里插入图片描述

在这里插入图片描述
完成新窗口的创建

mainwindow.h
添加新窗口的头文件
设置发出信号处理的槽函数,接受信号处理的槽函数
设置新窗口的窗口对象

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<QPushButton>
#include "subwidget.h"
#include "form.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void mysolt();
   void changeWin();
   void dealSub();
private:
    Ui::MainWindow *ui;
    QPushButton b1;
    QPushButton *b2;
     QPushButton *b3;

     SubWidget w;
     Form s;
};
#endif // MAINWINDOW_H

subwidget.h
添加信号和按钮定义

#ifndef SUBWIDGET_H
#define SUBWIDGET_H
#include<QPushButton>
#include <QWidget>
//#include "mainwindow.h"
class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);

    void sendSolt();
signals:
    /*信号必须有signals关键字来声明
     * 信号没有返回值,但可以有参数
       信号就是函数的声明,只需声明,无需定义
        使用: emit mysignal() ;*/

//public slots:
         void mySignal();

private:
    QPushButton *b;

};

#endif // SUBWIDGET_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "subwidget.h"
#include<QPushButton>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    b1.setParent(this);
    b1.setText("close");
    b1.move(100,100);

    b2=new QPushButton(this);
    b2->setText("abc");

    connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
    /*
     &b1:信号发出者,指针类型
     &QPushButton: :pressed:处理的信号,&发送者的类名::信号名字*
     this:信号接收者
     &Mainwidget : :close:槽函数,信号处理函数﹑&接收的类名:∵:槽函数名字
*/
    /*自定义槽,普通函数的用法
    * Qt5:任意的成员函数,普通全局函数,静态函数
    * 槽函数需要和信号一致(参数,返回值)
      由于信号都是没有返回值,所以,槽函数一定没有返回值*/

    connect(b2, &QPushButton::released,this, &MainWindow::mysolt);
    connect(b2, &QPushButton::released,&b1, &QPushButton::hide);

    setWindowTitle("老大");
    b3=new QPushButton(this);
    b3->setParent(this);
    b3->setText("切换到子窗口");
    b3->move(50,50);

  connect(b3, &QPushButton::released,this, &MainWindow::changeWin);

//处理子窗口的信号
  connect(&w,&SubWidget::mySignal,this,&MainWindow::dealSub);
  resize(500,500);

}

void MainWindow::mysolt()
{
    b2->setText("123");
}

void MainWindow::changeWin()
{
w.show();//显示子窗口
this->hide();
//s.show();
}
void MainWindow::dealSub()
{
    w.hide();//子窗口隐藏
    show();//本窗口show


}

MainWindow::~MainWindow()
{
    delete ui;
}


subwidget.cpp

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent)
    : QWidget{parent}
{
     this->setWindowTitle("小弟");
     b=new QPushButton(this);
     b->setParent(this);
     b->setText("切换到主窗口");

     connect(b,&QPushButton::pressed,this,&SubWidget::sendSolt) ;
      resize(500,500);
}


void SubWidget::sendSolt(){
    emit mySignal();
}

Lambda表达式
在.pro里加

CONFIG += C++11

lambda格式

//Lambda表达式,匿名函数对象
  //C++增加的新特性,项目文件:CONFIG += C++11
  //QT配合信号一起使用,非常方便
  QPushButton *b4=new QPushButton(this);
  b4->setText("lambda表达式");
  b4->move(150,150);
  int a=10,b=100;
  connect(b4,&QPushButton::clicked,
          //=:把外部所有局部变量、类中所有成员以值传递
          //this:类中所有成员以值传递
          //&:把所有局部变量,引用符号用它会出现内存还在用的情况
          //[=](bool isCheck) mutable//mutable让a和b的值可以改变
          [=]()mutable
  {
      b4->setText("123");
     qDebug()<<"1111111";
     qDebug()<<a<<b;
    //  qDebug()<<isCheck;
  });```


mainwindow.cpp代码

```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "subwidget.h"
#include<QPushButton>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    b1.setParent(this);
    b1.setText("close");
    b1.move(100,100);

    b2=new QPushButton(this);
                                                                                                                                                                                                                                                                                                                                                                                              b2->setText("abc");

    connect(&b1,&QPushButton::pressed,this,&MainWindow::close);
    /*
     &b1:信号发出者,指针类型
     &QPushButton: :pressed:处理的信号,&发送者的类名::信号名字*
     this:信号接收者
     &Mainwidget : :close:槽函数,信号处理函数﹑&接收的类名:∵:槽函数名字
*/
    /*自定义槽,普通函数的用法
    * Qt5:任意的成员函数,普通全局函数,静态函数
    * 槽函数需要和信号一致(参数,返回值)
      由于信号都是没有返回值,所以,槽函数一定没有返回值*/

    connect(b2, &QPushButton::released,this, &MainWindow::mysolt);
    connect(b2, &QPushButton::released,&b1, &QPushButton::hide);

    setWindowTitle("老大");
    b3=new QPushButton(this);
    b3->setParent(this);
    b3->setText("切换到子窗口");
    b3->move(50,50);

  connect(b3, &QPushButton::released,this, &MainWindow::changeWin);

//  void (SubWidget::*funSignal)()=&SubWidget::mySignal;
  connect(&win,&SubWidget::mySignal,this,&MainWindow::dealSub);//处理子窗口的信号
 //void (SubWidget::*testSignal)(int,QString)=&SubWidget::mySignal;
  connect(&win,&SubWidget::mySignal2,this,&MainWindow::dealSLot);
  resize(500,500);

  
  
  
  //Lambda表达式,匿名函数对象
  //C++增加的新特性,项目文件:CONFIG += C++11
  //QT配合信号一起使用,非常方便
  QPushButton *b4=new QPushButton(this);
  b4->setText("lambda表达式");
  b4->move(150,150);
  int a=10,b=100;
  connect(b4,&QPushButton::clicked,
          //=:把外部所有局部变量、类中所有成员以值传递
          //this:类中所有成员以值传递
          //&:把所有局部变量,引用符号用它会出现内存还在用的情况
          //[=](bool isCheck) mutable//mutable让a和b的值可以改变
          [=]()mutable
  {
      b4->setText("123");
     qDebug()<<"1111111";
     qDebug()<<a<<b;
    //  qDebug()<<isCheck;
  });
  
  
 
  
  
}
void MainWindow::dealSLot(int a,QString str)
{
    qDebug()<<a<<str;
}

void MainWindow::mysolt()
{
    b2->setText("123");
}

void MainWindow::changeWin()
{
win.show();//显示子窗口
this->hide();
//s.show();
}
void MainWindow::dealSub()
{
    win.hide();//子窗口隐藏
    show();//本窗口show


}

MainWindow::~MainWindow()
{
    delete ui;
}


本文仅仅是学习笔记(根据哔哩哔哩视频敲的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值