软件: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;
}
本文仅仅是学习笔记(根据哔哩哔哩视频敲的)