QT学习2021.3.8 信号和槽以及常用控件(二)

#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()
{
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值