触发的两种模式 connect() 和 on_控件ID_控件函数(参数)

两者优缺点对比:

  • 虽然 Qt 有比较好用的自动关联大法,但自动关联不是万能的,尤其是涉及到多个窗体的时候,比如 A 窗体私有按钮控件与 B 窗体私有消息框函数,这个因为权限限制,不是想自动关联就可以自动关联的。
  • 自动关联一般用于一个窗体之内的控件关联,其他很多情况都是需要手动编写 connect 函数的,所以学习 connect 函数的语法句式是必须的。

例子:我们使得按键的单击动作触发函数执行动作

connect() ——按钮弹窗手动动关联示例

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(FoodIsComing()));

头两个参数是源头对象和信号,后两个参数接收对象和槽函数

1 添加按键 ”测试connect()“  名称 pushButton_3

2 窗体的头文件Qt_Button.h  声明信号函数  pushButton_3_clicked()

Qt 的关键字 slots 就是槽函数声明段落的标志,槽函数声明段落可以是 private、protected 或者 public 类型的,这些访问权限和继承权限与普通成员函数是一样的,

3 窗体的Qt_Button.cpp 实现函数实体   pushButton_3_clicked()

注意 引用

#include <QDebug>               //调试输出类

 4  窗体的Qt_Button.cpp 构造函数里添加 connect()链接,  将按键的单击动作 clicked()和 要执行的函数pushButton_3_clicked()链接

执行

on_控件ID_控件函数()   —— 按钮弹窗自动关联示例

这种方法 不需要额外添加 connect() 函数。但需要修改一处,函数的命名非常关键。

on_控件ID_控件函数( 参数)

  • 必须是 on_  开头
  • 中间是 控件的 ID
  • 最后是 控件自身具有的 函数   例如 按键的click()
void on_<object name>_<signal name>(<signal parameters>);

  

1 创建一个按钮  按钮名称测试 on_<控件ID>_<控件函数>(),   它的ID是 pushButton_2

2 窗体的Qt_Button.h头文件 添加 信号函数 on_pushButton_2_clicked() 声明 (private slots 信号声明)

3 窗体的Qt_Button.cpp中 完成实体部分

4  不需要 额外在 窗体的构造函数中 添加connect(); 直接运行

为什么呢?

Qt_Button.h 里面有 on_pushButton_2_clicked 函数的声明,也是 QtCreator 自动添加的,不需要修改

有 QtCreator 自动生成的槽函数,有了自动关联,我们实际只遍了两行代码,自动关联的方式大大简化了我们需要做的工作

Debug 文件夹里可以找到 ui_Qt_Button.h,最关键的就是 setupUi 函数末尾一句:

 QMetaObject::connectSlotsByName(Widget);

  

connectSlotsByName 就是完成自动关联的函数,这是元对象系统包含的功能,根据对象名、信号名与 on_<object name>_<signal name>(<signal parameters>) 槽函数进行自动匹配关联,可以给程序员提供便利,省了许多 connect 函数调用的代码。后面 4.5 节还会再详细讲这些代码,本节学会用自动关联大法就够了。

参看:https://qtguide.ustclug.org/

Qt 编程指南 3_1 按钮弹窗手动和自动关联示例的更多相关文章

  1. Qt 编程指南 4 按钮

    1按钮类的控件 逐个解释一下各个用途:(1)按压按钮 QPushButton最基本的按钮,点击该按钮通常是通知程序进行一个操作,比如弹个窗.下一步.保存.退出等等,这是经常用到的,操作系统里的对话框里 ...

  2. Qt 编程指南 4 按钮2 打开网页和文件夹

    功能:  按键打开文件夹和网页 效果: 教程 1 添加两个链接按钮   分别命名 commandLinkButtonFolder 和  commandLinkButtonWeb 2 创建项目 改变调试 ...

  3. Qt 编程指南

    Qt 编程指南 持续关注一本正在编写的Qt编程指南,期待作者早日完成创作.

  4. Qt 编程指南 3 信号和槽沟通

    https://qtguide.ustclug.org/ 1 信号和槽 所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座.怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键, ...

  5. Qt 编程指南 4 单行编辑控件

    从 Qt 设计师界面可以看到常用的 Qt 文本编辑和浏览控件,包括四个: 其中单行编辑控件 QLineEdit 和 普通文本编辑控件 QPlainTextEdit 都是针对最普通的 C++ 字符串编辑 ...

  6. Qt 编程指南10 QImage Mat QPixmap转换

      //示例 pushButtonOpenPicBig按钮clicked单击动作触发 void Qt_Window::on_pushButtonOpenPicBig_clicked() { strin ...

  7. Qt 编程指南 9 软件打包

    Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑 里无法正常运行.因此 Qt 官方开发环境里自带了一 ...

  8. Qt 编程指南 8 显示静态小图片和动态大图片

    显示控件概览 图片浏览示例 第一行是一个标签控件,objectName 为 labelShow,文本内容清空,因为是用来显示图片用的. 主界面第二行的控件是四个普通按钮 第一个按钮文本是 " ...

  9. Qt 编程指南 1 从Hello World开始

    1 简单的hello QT 注意项目和路径不要包含任何中文字符,特殊字符,空格. 只能有英文,数字,下划线,且不能数字开头. //helloqt.cpp #include <QtWidgets/ ...

随机推荐

  1. 初识SqlLite ---.net连接数据库

    Sqlite 是一款轻量级的关系型数据库,以小巧和嵌入式闻名.以前只是听说,现在终于忍不住要尝试下.本文的初衷是为.net平台的使用者提供帮助. Sqlite有专门为VS2010开发的程序包,大家可以 ...

  2. vue.js 使用时间组件 日期少一天的问题

    <el-form :inline="true" class="demo-form-inline padding-top-20"> <el-fo ...

  3. c#英文大小写快捷键

    选中一段英文 Ctrl+U 转小写 Ctrl+Shift+U 转大写

  4. git+github/码云+VSCode (转载)

    VSCode中使用git,参见. Git安装   在初次使用时如果本地没有安装git会提示先安装git,然后重启vscode. 一.本地操作项目前提: 1)若本地没有git拉取下来的项目,用git克隆 ...

  5. C#多线程——优先级

    在我的公司这里,因为要跟很多特殊的设备打交道,所以会用到多线程的东西,那么我们在进行多线程处理的时候,怎么去设置优先级 我这里用听歌和下载小说做了个例子,我们用电脑的时候肯定是可以边听歌边下载小说的, ...

  6. 微信小程序Map组件踩坑日记

    刚刚又发生一个bug,搞得我头皮发麻,本来该美滋滋的回家准备度过愉快的周末,瞬间变成了日常修bug,来,开始填坑之路 情景再现: 首先说一说我们项目的需求, 点击下方,弹出抽屉 点击对应的地图打开相应 ...

  7. video自动禁止全屏

    在微信浏览器.苹果等其他浏览器,里面使用video标签,会自动变成全屏,改成下面就好了,起码可以在video标签之上加入其他元素    webkit-playsinline playsinline x ...

  8. Docker 加速器设置

    在部署完docker的时候我们需要进行在镜像源下载镜像的时候有时候会出现特别慢的情况(这是因为本地到源的网络出现了问题),这时候就需要使用加速器来对镜像进行下载了,在面咱们就聊一聊docker加速器的 ...

  9. PullToRefreshGridView上拉刷新,下拉加载

    PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...

  10. js replace替换 忽略大小写问题

    实现就是控制台的内容“abc”,但是后台返回的是“ABC”,这个时候在前台遍历,需要将后台返回的在控制台标红. 当然控制台可以是 abc Abc等大小写混合,以下代码都可替换. var flagnew ...