QT的学习之路——新建打开关闭窗口、按钮控件、lambda表达式、信号与槽

新建窗口:QWidget *newwidget = new QWidget;

新建按钮:#include    QPushButton *btn = new QPushButton("open", this);

设置按钮的父母:btn->setParent(this);   这一步必须有,这样才能正常显示、析构

给按钮设置名字和样式:   

    btn->setText("open");
    this->resize(600,400);
    btn->resize(120,60);
    btn->move(240,100);

访问按钮的名字:btn->text()

Lambda表达式常用类型: [=](){}   用于定义并创建匿名的函数对象

信号与槽函数的连接:connect(发送者,发送的信号函数,接收者,槽函数)

关键要点——

  1. 信号函数只需要声明,不需要实现;使用signal进行声明;可以带参;没有返回值(void);可以使用emit关键字触发信号
  2. 槽函数需要声明,也需要实现;可以声明成:类的成员函数、静态函数、全局函数、lambda表达式;可以带参(信号和槽的参数必须一一对应);没有返回值(void);
  3. 槽的参数的个数必须比信号的个数要少
  4. 信号和槽函数可以重载,需要函数指针 -> 函数地址  要加上指向有参的函数(QString) ,以及作用域 Teacher::
  5. 信号可以连接信号,信号可以连接多个槽函数,一个槽函数也可以对应多个信号
  6. 信号可以被disconnect
//mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include "mypushbutton.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    //creat button
    QPushButton *btn = new QPushButton("open", this);
    btn->setParent(this);
    this->resize(600,400);
    btn->resize(120,60);
    btn->move(240,100);

    //creat widget(不调用show不会显示)
    QWidget *newwidget = new QWidget;
    //clicked open newwidget
    connect(btn,&QPushButton::clicked,newwidget,[=](){
        if(btn->text()=="open"){
            newwidget->show();
            newwidget->resize(300,200);
            newwidget->move(1350,350);
            btn->setText("close");
        }
        else{
            newwidget->close();
            btn->setText("open");
        }
    });
}

MainWindow::~MainWindow()
{
    qDebug() << "mainwindow的按钮类析构";
    delete ui;
}

 

你可能感兴趣的:(linux)