当前位置: 首页 > news >正文

h5企业模板网站模板下载雄安智能网站建设

h5企业模板网站模板下载,雄安智能网站建设,兰州网站建设lst0931,汕头百度搜索排名优化目录 信号槽 1. 概念 2. 函数原型 3. 连接方式 3.1 自带信号 → 自带槽 3.2 自带信号 → 自定义槽 3.3 自定义信号 4. 信号槽传参 5. 对应关系 5.1 一对多 5.2 多对一 信号槽 1. 概念 之前的程序界面只能看#xff0c;不能交互#xff0c;信号槽可以让界面进行人机…目录 信号槽 1. 概念 2. 函数原型 3. 连接方式 3.1 自带信号 → 自带槽 3.2 自带信号 → 自定义槽 3.3 自定义信号 4. 信号槽传参 5. 对应关系 5.1 一对多 5.2 多对一 信号槽 1. 概念     之前的程序界面只能看不能交互信号槽可以让界面进行人机交互。     信号槽是Qt在C基础上新增的特性类似于其他编程中的回调机制其目的是实现对象之间的通信。 使用信号槽需要具备两个先决条件 通信的对象必须继承自QObject QObject是Qt所有对象的基类内部规定了Qt最基础的对象特性。 类中要包含Q_OBJECT宏 2. 函数原型 信号槽的建立是通过connect函数实现的。 // 信号槽连接函数 // 参数1发射者因发起的对象n. // 参数2信号函数因的动作v.需要使用SIGNAL()包裹函数名称 // 参数3接收者果执行的对象n. // 参数4槽函数果的动作v.需要使用SLOT()包裹函数名称 QObject::​connect(const QObject * sender, const char * signal, const QObject * receiver, const char * slot) [static] 信号函数一定来自于发射者槽函数一定来自于接收者。信号槽的连接必须在发射者对象和接收者对象创建完成后进行如果成功连接后发射者或接收者对象销毁了连接断开。     信号槽的连接也可以程序员手动断开只需要把connect函数改为disconnect即可参数保持不变。 3. 连接方式 为了讲课按照难易程度分为三种连接方式 自带信号 → 自带槽自带信号 → 自定义槽自定义信号 → 槽 3.1 自带信号 → 自带槽     这种连接方式是最简单的连接方式因为信号函数和槽函数都是Qt内置的程序员只需要找到连接的四个参数直接连接即可。 【例子】点击按钮关闭窗口。 分析 参数1发射者——按钮对象 参数2信号函数——点击 void QAbstractButton::​clicked() [signals] 参数3接收者——窗口对象 参数4槽函数——关闭 bool QWidget::​close() [slot] dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButtonclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton *btn; };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent) {resize(400,400);btn new QPushButton(关闭,this);btn-move(100,100);// 参数1发射者——按钮对象// 参数2信号函数——点击// 参数3接收者——窗口对象// 参数4槽函数——关闭connect(btn,SIGNAL(clicked()),this,SLOT(close())); }Dialog::~Dialog() {delete btn; }3.2 自带信号 → 自定义槽     这种连接方式是使用的最多的一种连接方式因为在实际开发中Qt无法预设所有的槽函数情况对于复杂的操作执行逻辑需要程序员手动编写槽函数。 槽函数是一种特殊的成员函数。 【例子】点击按钮窗口向右下角移动10个像素并且后台输出当前窗口的位置。 dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton *btn;// 槽函数的声明 private slots: // 最小权限原则void mySlot(); // 自定义槽函数 };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent) {resize(400,400);btn new QPushButton(关闭,this);btn-move(100,100);// 连接信号槽connect(btn,SIGNAL(clicked()),this,SLOT(mySlot())); }void Dialog::mySlot() {// 先获得当前坐标int x this-x();int y this-y();// 移动move(x10,y10);// 输出当前窗口位置qDebug() this-x() this-y(); }Dialog::~Dialog() {delete btn; }3.3 自定义信号     自定义信号通常用于解决一些对象之间“远距离”通信问题本节属于强行使用因此并不是问题最优解只是为了展示自定义信号的使用方式。 【例子】点击按钮按钮上显示点击的次数。 先忽略自定义信号展示正常解法 dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton* btn;int count;private slots:void btnClickedSlot(); // 点击按钮的槽函数 };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表 {resize(400,400);btn new QPushButton(0,this);btn-move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot())); }void Dialog::btnClickedSlot() {count;// int → QStringQString text QString::number(count);// 设置到按钮上显示btn-setText(text); }Dialog::~Dialog() {delete btn; }基于上面的解法强行增加自定义信号发射环节      信号函数是一种特殊的函数只有声明没有定义声明后可以直接配合emit关键字发射。 dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton* btn;int count;signals:void countSignal(); // 自定义信号private slots:void btnClickedSlot(); // 点击按钮的槽函数void countSlot(); // 与自定义信号连接的槽函数 };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表 {resize(400,400);btn new QPushButton(0,this);btn-move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot()));connect(this,SIGNAL(countSignal()),this,SLOT(countSlot())); }void Dialog::btnClickedSlot() {count;// 发射自定义信号emit countSignal(); }/*** brief Dialog::countSlot* 中转之后更新按钮显示的槽函数*/ void Dialog::countSlot() {QString text QString::number(count);btn-setText(text); }Dialog::~Dialog() {delete btn; }4. 信号槽传参     信号槽可以进行参数传递信号函数携带参数发射槽函数可以收到此参数。 dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton* btn;int count;signals:void countSignal(int); // 自定义信号private slots:void btnClickedSlot(); // 点击按钮的槽函数void countSlot(int); // 与自定义信号连接的槽函数 };#endif // DIALOG_H dialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent),count(0) // 构造初始化列表 {resize(400,400);btn new QPushButton(0,this);btn-move(200,200);connect(btn,SIGNAL(clicked()),this,SLOT(btnClickedSlot()));connect(this,SIGNAL(countSignal(int)),this,SLOT(countSlot(int))); }void Dialog::btnClickedSlot() {count;// 发射自定义信号(携带参数)emit countSignal(count); }/*** brief Dialog::countSlot* count参数是信号函数发来的不是成员变量* 中转之后更新按钮显示的槽函数*/ void Dialog::countSlot(int count) {QString text QString::number(count);btn-setText(text); }Dialog::~Dialog() {delete btn; }需要注意的是 理论上可以传递任意多个参数信号函数的参数个数必须大于等于槽函数的参数个数参数类型需要匹配 5. 对应关系     同一个信号可以连接到多个槽一对多多个信号也可以连接到同一个槽多对一。 5.1 一对多     槽函数也是成员函数因此在一对多的连接关系中把连接的多个槽函数可以看做是普通的成员函数合并为一个槽函数。 dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton* btn1;QPushButton* btn2;private slots:void btnClickedSlot1();void btnClickedSlot2();void btnClickedSlot3(); // 3 1 2 };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent) {resize(400,400);btn1 new QPushButton(一对多, this);btn1-move(200,100);btn2 new QPushButton(一对一, this);btn2-move(100,200);// 一对多connect(btn1,SIGNAL(clicked()),this,SLOT(btnClickedSlot1()));connect(btn1,SIGNAL(clicked()),this,SLOT(btnClickedSlot2()));// 一对一connect(btn2,SIGNAL(clicked()),this,SLOT(btnClickedSlot3())); }void Dialog::btnClickedSlot1() {qDebug() A; }void Dialog::btnClickedSlot2() {qDebug() B; }void Dialog::btnClickedSlot3() {// 直接把Slot1和Slot2两个函数当做普通的成员函数// 使用this指针调用btnClickedSlot1();btnClickedSlot2(); }Dialog::~Dialog() {delete btn1; }5.2 多对一     多对一的连接方式下槽函数无法区分信号来源可以在槽函数中调用sender函数获取发射者对象从而判断信号来源。 // 在槽函数中调用返回发射者对象 QObject * QObject::​sender() const dialog.h #ifndef DIALOG_H #define DIALOG_H#include QDialog #include QPushButton #include QDebugclass Dialog : public QDialog {Q_OBJECTpublic:Dialog(QWidget *parent 0);~Dialog();private:QPushButton* btn1;QPushButton* btn2;private slots:void btnsClickedSlot(); };#endif // DIALOG_Hdialog.cpp #include dialog.hDialog::Dialog(QWidget *parent): QDialog(parent) {resize(400,400);btn1 new QPushButton(A,this);btn2 new QPushButton(B,this);btn1-move(150,100);btn2-move(150,200);// 多对一connect(btn1,SIGNAL(clicked()),this,SLOT(btnsClickedSlot()));connect(btn2,SIGNAL(clicked()),this,SLOT(btnsClickedSlot())); }void Dialog::btnsClickedSlot() {if(btn1 sender()){qDebug() 点击了按钮1;}else if(btn2 sender()){qDebug() 点击了按钮2;}qDebug() 槽函数触发; }Dialog::~Dialog() {delete btn1;delete btn2; }
http://www.hkea.cn/news/14416694/

相关文章:

  • 网站跳出率计算国外优惠卷网站如何做
  • 个人备案号 可以做游戏网站吗越南网络公司排名
  • 湖南建设网塔吊证查询济南网站seo哪家公司好
  • 深圳常平网站建设制作公司怎么做公众号小程序
  • 网站的程序和数据库怎么做的扬州工程建设信息网官网
  • 怎么自己建网站网站后台登陆密码忘记
  • 企业网站建设运营的灵魂是什么吕梁做网站
  • 成品网站制作公司深圳画册设计报价
  • 网站开发已有的知识储备网站首页的动态视频怎么做的
  • 我是做网站的网站seo课设
  • 如何让人帮忙做网站医疗网站建设怎么样
  • vue php 哪个做网站 好怎么往网站里做游戏
  • 什么静态网站容易做服装公司网站策划书
  • 化妆品网站欣赏宜家在线设计
  • 写资料的网站有哪些内容网站运营需要 做哪些工作
  • 做健身网站建站公司收费标准
  • 网站关键词密度查询2008 iis搭建网站
  • 网页设计网站怎么做特效html5 网站布局应用教程
  • 代做网站 猪八戒网文创产品设计展板
  • 荷兰网站开发价格wordpress怎么博客排版
  • 新手建设什么网站好聊城优化seo
  • jsp网站建设代码做网站_你的出路在哪里
  • 学做美食饮品网站玉林市网站开发公司电话
  • 我有域名和服务器找人建设网站城市焦点商城网站建设案例
  • angular2做的网站有手机如何制作表格
  • 贵港购物网站开发设计一个企业网站需要多少钱
  • 品牌网站方案高端网站建设青岛
  • 免费做一建或二建题目的网站口碑好的合肥网站建设
  • 南康区城乡规划建设局网站有没有专业做咖啡店设计的网站
  • 类似链家网站建设方案东莞加工厂外发网