QT学习(三) | 您所在的位置:网站首页 › qt按钮connect › QT学习(三) |
3.1 前置工作
先新建一个项目day02,这里设置的一个类为 Mywidget,其是 QWidget 的子类 如下所示: 3.2 信号和槽的基本概念信号和槽:是QT框架引以为豪的东西。实际上就是观察者模式的一种简易方式。 使用 connect 函数可以为信号以及槽建立好连接,当信号广播时(触发),槽做出相应的处理。 信号来源于被观察者,槽来自于观察者。 Signal信号:函数声明,无需实现。系统大多数类,都内置了信号 开发者也可以自定义信号。 Slot槽:本质就是一个函数 一般是类的成员函数 有声明且有实现体。系统大多数类,都内置了槽 开发者也可以自定义槽。 3.3 案例1(最大化按钮)设计一个最大化按钮,当按钮被按下后,窗口变成最大化。 观察者:窗口被观察者:最大化按钮信号:点击槽:变最大化 connect函数原型语法语法:connect (被观察者,信号,观察者,槽); (1)创建一个按钮 (2)建立信号和槽的连接 (3)运行结果点击 ” 最大化 “ 按钮后窗口变为最大化了: (4)添加最小化、正常化按钮 (5)运行结果 3.4 案例2(打老鼠按钮)设置一个按钮: 按住该按钮屏幕打印 ”老鼠被打了“; 松开该按钮屏幕打印 ”老鼠反抗了“ (1)前置知识:一些C++11 新特性 (2)Lambda表达式 形式1: [变量名1,变量名2,.....] (参数表) -> 返回值 { 函数体 } 指定部分变量访问 这种是以值传递的方式传入的,不能在内部进行改变值。 形式2: [=] (参数表) -> 返回值 { 函数体 } (值传递形式)捕获所有外部变量(内部无法改变实际变量) 同样也是值传递,不能改变值 形式3: [&] (参数表) -> 返回值 { 函数体 } (引用形式)捕获所有外部变量(内部可以改变实际变量) (3)利用Lambda表达式实现槽函数运行结果: (4)示例代码:Mywidget.cpp #include "Mywidget.h" #include #include Mywidget::Mywidget(QWidget *parent): QWidget(parent) {//---------------- 案例1 -------------------//// 最大化按钮 (被观察者)QPushButton* btnMax = new QPushButton("最大化", this);// this窗口 (观察者)// 建立信号 和 槽连接 clicked()信号:表示按钮被点击了 showMaximized()槽函数:表示窗口最大化connect(btnMax, &QPushButton::clicked, this, &Mywidget::showMaximized);QPushButton* btnMin = new QPushButton("最小化", this);btnMax->move(100, 0);// showMinimized()槽函数:表示窗口最小化connect(btnMin, &QPushButton::clicked, this, &Mywidget::showMinimized);QPushButton* btnNormal = new QPushButton("正常", this);btnNormal->move(200, 0);// showNormal()槽函数:表示窗口正常化connect(btnNormal, &QPushButton::clicked, this, &Mywidget::showNormal);// ---------------- 案例2 ------------------//// 设置一个按钮// 鼠标按下 打印 被打了// 鼠标抬起 打印 反抗QPushButton* btn = new QPushButton("老鼠", this);btn->move(200, 200);// 当按钮被点击时,调用lambda表达式函数connect(btn, &QPushButton::pressed, []()->void{qDebug() } |
CopyRight 2018-2019 实验室设备网 版权所有 |