热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

QT信号、槽和常用控件

信号、槽与控件信号和槽介绍信号和槽:是QT框架引以为豪的东西,实际上就是观察者模式,使用connect函数可以为信号和槽建立好连接&#

信号、槽与控件


信号和槽介绍

信号和槽:是QT框架引以为豪的东西,实际上就是观察者模式,使用connect函数可以为 信号 建立好连接,当信号触发时,槽做出相应处理

观察者模式:比如说,老师在给学生上课,当老师发出下课信号,这时学生就可以处理自己的事情(买零食,说话,接水,,,,)

信号来自于 被观察者(老师),槽来自于 观察者(学生)

信号(Signal):函数声明,无需实现;系统大多数类都内置了信号,开发者也可以自定义信号
槽(Slot):本质也是个函数,一般是类的成员函数,必须有声明且有实现;系统大多数类都内置了槽,开发者也可以自定义槽


信号和槽的联动(connect)

connect使用:
connect(被观察者,信号,观察者,槽);
connect(被观察者,信号,Lamda表达式匿名函数);
connect(被观察者,SIGNAL(信号),观察者,SLOT(槽函数));//老版本用法


控件

指用户看到的所有可视化界面以及界面中的各个元素,比如按钮、文本框、输入框等。其实上次所说的按钮也是一个控件,他包含在不同的头文件中,比如说:

1. #include <QPushButton> //QT中按钮的头文件,按钮控件2. #include <QLabel> //文本控件3. #include<QSlider> //滑动条控件4. #include <QProgressBar>//进度条控件5. #include <QTextEdit>//文本编辑框控件

练习1


题目描述

创建3个按钮&#xff0c;分别是 最大化&#xff0c;最小化&#xff0c;正常化&#xff0c;点击这三个按钮分别给出不同的反应&#xff0c;和平常我们的使用一样&#xff08;最大化&#xff0c;最小化&#xff0c;正常化&#xff09;。


代码描述

#include "Widget.h"
#include //QT中按钮的头文件,按钮控件Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("Start"); //设置窗口标题//创建按钮QPushButton* btnMax &#61; new QPushButton("最大化",this);//自动释放auto btnMin &#61; new QPushButton("最小化",this);btnMin->move(100,0);//防止两个按钮重合auto btnNorm &#61; new QPushButton("正常",this);btnNorm->move(200,0);//防止两个按钮重合//建立链接&#xff08;最大化,最小化&#xff0c;正常&#xff09;connect(btnMax,&QPushButton::clicked,this,&QWidget::showMaximized);connect(btnMin,&QPushButton::clicked,this,&QWidget::showMinimized);connect(btnNorm,&QPushButton::clicked,this,&QWidget::showNormal);}Widget::~Widget()
{}

结果展示

请添加图片描述
请添加图片描述


练习2


题目描述

设置按钮&#xff1a;鼠标按下&#xff0c;打印文本1&#xff1b;鼠标抬起&#xff0c;打印文本2
这里用到了lamada表达式以后介绍。


代码描述

#include "Widget.h"
#include //QT中按钮的头文件,按钮控件
#include //文本打印Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("Start"); //设置窗口标题//练习1&#xff1a;设置按钮&#xff1a;鼠标按下&#xff0c;打印文本1&#xff1b;鼠标抬起&#xff0c;打印文本2QPushButton* btn &#61; new QPushButton("点击",this);btn->move(300,200);//建立连接,当点击按钮时&#xff0c;调用Lamda表达式connect(btn,&QPushButton::pressed,[]()->void{qDebug()<<"中奖了!";});connect(btn,&QPushButton::released,[]()->void{qDebug()<<"好开心!";});}Widget::~Widget()
{}

结果

在这里插入图片描述


练习3


题目描述

通过滑动滑动条&#xff0c;改变字体大小(没有改变字体的槽&#xff0c;用lamda表达式)


代码

#include "Widget.h"
#include //QT中按钮的头文件,按钮控件
#include //文本控件
#include //滑动条控件
#include //进度条控件
#include //文本编辑框控件
#include Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("Start"); //设置窗口标题
//常用控件&#xff1a;&#xff08;便于信号和槽之间的连接&#xff09;//文本控件QLabel *laber&#61; new QLabel;laber->setParent(this);laber->move(0,100);laber->setText("前方路窄&#xff0c;方显英雄本色");laber->setFont(QFont("楷体",20,10,1));//滑动条控件QSlider* slider &#61; new QSlider;slider->setParent(this);slider->move(300,100);slider->setValue(0);//设置滑动条的值slider->setMaximum(100);//练习2&#xff1a;通过滑动滑动条&#xff0c;改变字体大小(没有改变字体的槽&#xff0c;用lamda表达式)connect(slider,&QSlider::valueChanged,[laber](int _value)->void{laber->setFont(QFont("楷体",_value,10,1));laber->resize(500&#43;_value,_value&#43;100);});}Widget::~Widget()
{}

结果

请添加图片描述请添加图片描述


练习4


题目描述

通过滑动条改变进度条案例


代码

#include "Widget.h"
#include //QT中按钮的头文件,按钮控件
#include //文本控件
#include //滑动条控件
#include //进度条控件
#include //文本编辑框控件
#include Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("Start"); //设置窗口标题
//常用控件&#xff1a;&#xff08;便于信号和槽之间的连接&#xff09;//文本控件QLabel *laber&#61; new QLabel;laber->setParent(this);laber->move(0,100);laber->setText("前方路窄&#xff0c;方显英雄本色");laber->setFont(QFont("楷体",20,10,1));//滑动条控件QSlider* slider &#61; new QSlider;slider->setParent(this);slider->move(300,100);slider->setValue(0);//设置滑动条的值slider->setMaximum(100);//通过滑动滑动条&#xff0c;改变字体大小(没有改变字体的槽&#xff0c;用lamda表达式)connect(slider,&QSlider::valueChanged,[laber](int _value)->void{laber->setFont(QFont("楷体",_value,10,1));laber->resize(500&#43;_value,_value&#43;100);});//进度条控件QProgressBar* probar &#61; new QProgressBar;probar->setParent(this);probar->move(0,300);probar->resize(this->size().width(),20);//跟随窗口大小的宽probar->setValue(0);//probar->setMaximum(99);//通过滑动条改变进度条案例connect(slider,&QSlider::valueChanged,[probar](int _value)->void{probar->setValue(_value);});}Widget::~Widget()
{}

结果

请添加图片描述


练习5


题目描述

通过编辑文本框&#xff0c;改变Laber文本内容


代码

#include "Widget.h"
#include //QT中按钮的头文件,按钮控件
#include //文本控件
#include //滑动条控件
#include //进度条控件
#include //文本编辑框控件
#include Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowTitle("Start"); //设置窗口标题//常用控件&#xff1a;&#xff08;便于信号和槽之间的连接&#xff09;//文本控件QLabel *laber&#61; new QLabel;laber->setParent(this);laber->move(0,100);laber->setText("前方路窄&#xff0c;方显英雄本色");laber->setFont(QFont("楷体",20,10,1));//滑动条控件QSlider* slider &#61; new QSlider;slider->setParent(this);slider->move(300,100);slider->setValue(0);//设置滑动条的值slider->setMaximum(100);//通过滑动滑动条&#xff0c;改变字体大小(没有改变字体的槽&#xff0c;用lamda表达式)connect(slider,&QSlider::valueChanged,[laber](int _value)->void{laber->setFont(QFont("楷体",_value,10,1));laber->resize(500&#43;_value,_value&#43;100);});//进度条控件QProgressBar* probar &#61; new QProgressBar;probar->setParent(this);probar->move(0,300);probar->resize(this->size().width(),20);//跟随窗口大小的宽probar->setValue(0);//probar->setMaximum(99);//通过滑动条改变进度条案例connect(slider,&QSlider::valueChanged,[probar](int _value)->void{probar->setValue(_value);});//文本编辑框控件QTextEdit* texte &#61; new QTextEdit;texte->setParent(this);texte->move(0,350);texte->resize(200,200);texte->setFontUnderline(1);texte->setFontPointSize(qreal(35.5));texte->setText("莫愁前路无知己");//通过编辑文本框&#xff0c;改变Laber文本内容connect(texte,&QTextEdit::textChanged,[laber,texte]()->void{QString text &#61; texte->toPlainText();//获取文本laber->setText(text);});
}Widget::~Widget()
{}

结果

请添加图片描述


推荐阅读
author-avatar
Jason子宣_805
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有