#include "mainwindow.h"
#include "QApplication"
/*
***信号和槽:实际上就是 观察者模式 一种简易的方式。使用connect函数可以为 信号 以及 槽 建立好连接 当信号广播(触发)
时 槽 做出相应的处理。信号 来自于被 观察者 槽 来自于观察者。
信号(signals):函数声明 无需实现 系统大多数类 都内置了信号 开发者也可以自定义信号(自定义信号)
槽(slots):本质就是个函数 一般是类的成员函数 有声明且有实现体 系统大多数类 也内置了槽 开发者也可以自定义槽
connect(被观察者,信号,观察者,槽函数);//用法一
connect(被观察者,信号,Lamda表达式匿名函数);//用法二
connect(被观察者,SIGNAL(函数信号),观察者,SLOT(槽函数));//QT4老版本方法
C++11新特性
nullptr空指针
auto自动类型
Lamda表达式 匿名函数
for each新循环遍历方式
返回值 函数名(参数表){}
Lamda表达式定义函数
[可访问外部变量](参数表)->返回值{函数体}
[可访问外部变量](参数表)->返回值{函数体}
[变量名1,变量2....](){} 指定部分变量访问
[=](){} 值传递形式捕获所有外部变量(内部无法改变实际变量)
[&](){} 引用形式捕获所有外部变量(可以改变实际变量)***
/---------------------------------常用控件---------------------/
#include<QPushButton>//按钮控件
#include<QDebug>//调试控件
#include<QLabel>//文本控件
#include<QSlider>//滑动条控件
#include<QProgressBar>//进度条控件
#include<QTextEdit>//文本编辑控件
按钮控件
调试控件
文本控件
滑动条控件
进度条控件
文本编辑控件
*/
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
-------------------mainwindow.cpp---------------------------------------------------
0#include "mainwindow.h"
#include<QPushButton>//按钮控件
#include<QDebug>//调试控件
#include<QLabel>//文本控件
#include<QSlider>//滑动条控件
#include<QProgressBar>//进度条控件
#include<QTextEdit>//文本编辑控件
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
/*
auto maxx=new QPushButton("最大化",this);
maxx->move(20,20);
auto max=new QPushButton("最小化",this);
auto maxxx=new QPushButton("正常",this);
maxxx->move(40,40);
connect(maxx,&QPushButton::clicked,this,&QWidget::showMaximized);
connect(max,&QPushButton::clicked,this,&QWidget::showMinimized);
connect(maxxx,&QPushButton::clicked,this,&QWidget::showNormal);
*/
/*----------------------
//函数指针
void(*pFun)();
pFun=[]()->void
{
qDebug()<<"被打了";
};
pFun();
int num=1,num2=2;
void (*pFun)(int&)=[](int& n)->void
{
n=250;
qDebug()<<n;
};
pFun(num);
qDebug()<<num;
----------------------*/
/*----------------------
//可改变内部参数
int ii=900;
[&]()->void
{
num=800;
qDebug()<<ii;
qDebug()<<"被打了";
};
qDebug()<<ii;
----------------------*/
/*----------------------
*
//不可改变内部参数
int ii=900;
[=]()->void
{
qDebug()<<ii;
qDebug()<<"被打了";
};
----------------------*/
//练习一:
//设置一个按钮
//鼠标按下 打印 被打了
//鼠标抬起 打印 反抗了
auto bun=new QPushButton("老鼠",this);
//当按键点击 时调用Lamda表达式函数
connect(bun,&QPushButton::pressed,[]()->void{qDebug()<<"别打了";});
connect(bun,&QPushButton::released,[]()->void{qDebug()<<"他妈的";});
//---------------------常用控件
//-------------文字控件
QLabel*lab=new QLabel;
lab->setParent(this);\
lab->move(0,100);
lab->setText("星期五房价好");
lab->setFont(QFont("楷体",20,10,1));
//------------------滑动控件
QSlider*sl=new QSlider;
sl->setParent(this);
sl->move(100,100);
sl->setValue(20);
//练习2:通过滑动 滑动条 改变字体大小
connect(sl,&QSlider::valueChanged,[lab](int value){
lab->setFont(QFont/**/(QFont("楷体",value,10,1)));
});
//-----------进度条控件
QProgressBar*pro=new QProgressBar;
pro->setParent(this);
pro->move(0,200);
pro->resize(this->size().width(),20);
pro->setValue(0);
//pro->setMaximum(100);
//练习3:通过滑动代变进度条进度
//connect(被观察者,信号,观察者,槽函数);//用法一
//connect(被观察者,信号,Lamda表达式匿名函数);//用法二
connect(sl,&QSlider::valueChanged,[pro](int v){pro->setValue(v);});
//-----------文本编辑框
QTextEdit* ed=new QTextEdit;
QString l;
ed->move(0,300);
ed->resize(200,200);
ed->setParent(this);
ed->setFontUnderline(1);//下划线1有0无
ed->setFontPointSize(qreal(20));
ed->setText("交叉编译工具链");
//练习4:通过修改文本内容改变laber文本内容
connect(ed,&QTextEdit::textChanged,[lab,ed](){
QString text=ed->toPlainText();
lab->setText(text);
});
//--------------补充:老版本qt4 信号和槽的绑定
//点击按钮 最大化窗口
auto but=new QPushButton("LAOBB",this);
connect(but,SIGNAL(clicked(bool)),this,SLOT(showMaximized()));}
MainWindow::~MainWindow()
{
}
QT学习2021.3.8 信号和槽以及常用控件(二)
最新推荐文章于 2024-05-21 14:55:40 发布