一.简介

QT使用元对象编译器(Meta Object Compiler,moc),实现了元对象(Meta Object System,mos)机制,为标准C++增加了一些特性:

  • 信号槽机制,用于解决对象之间的通讯
  • 可查询可设计的对象属性
  • 强大的事件机制以及事件过滤器
  • 基于上下文的字符串翻译机制(国际化),用 tr() 函数实现
  • 复杂的定时器实现,用于在事件驱动的GUI中嵌入能够精确控制的任务集成
  • 层次化的可查询的对象树,提供一种自然的方式管理对象关系
  • 智能指针(QPoint),在对象析构之后自动设为0,防止野指针
  • 能够跨越库边界的动态转换机制

元对象系统是基于以下3个条件:

(1)基类QObject:任何需要使用元对象系统功能的类必须继承自QObject类

(2)Q_OBJECT宏:必须在类的私有声明区声明Q_OBJECT宏(默认为private)

(3)元对象编译器(Meta-Object Compiler,moc):为QObject子类实现元对象特性提供必要的代码

二.信号槽

QT编程中信号与槽用于处理界面各个组件的交互,类似与MFC的消息循环和绑定

注意:在使用信号与槽的类中,必须在类的定义中加入宏定义Q_OBJECT

信号(Signal)就是在特定情况下被发射的时间,类似于鼠标单击时发生clicked()信号

槽(Slot)是对信号响应的函数

1.ui文件设计信号与槽函数

在需要设计槽的控件(触发控件)上右键->转到槽

或者直接按下F4进入快速选择信号和槽函数

选择相应的信号之后就会跳转到该信号函数

  • lineEdit 文本编辑框

    textChanged(QString)

    testEdited(QString)   

  • pushButton 按钮

    clicked()

    clicked(bool)

    pressed()

//helloDialog.h

class HelloDialog : public QMainWindow {

// 声明槽函数
private slots:
void on_pushButton_clicked();
}
//helloDialog.cpp

void HelloDialog::on_pushButton_clicked() {

    ui->lineEdit->setText("k5");
}

2.内置的信号与槽函数

如果不在.ui文件里面直接绑定,就必须用connect()进行绑定

connect(

ui文件下的控件名称

控件自带的信号函数

自定义的对象

自定义的槽函数

)

//helloDialog.h

class HelloDialog{

public:
void initSignalSlots(); //初始化信号与槽连接

// 声明槽函数
private slots:
void changeData();
}
//helloDialog.cpp

void HelloDialog::initSignalSlots() {

    connect(ui->pushButton,SIGNAL(cliked()),this,SLOT(changeData));
} void HelloDialog::changeData(){
ui->lineEdit->setText("k5");
}

3.自定义信号和槽函数

除了使用QT内置的信号函数和槽函数,也可以自定义信号和槽函数.

创建两个类继承QObject类,添加Q_Object宏,用signals和slots标记信号和槽函数

// test.h

#ifndef TEST_H
#define TEST_H #include <QObject>
#include <QDebug> class test : public QObject
{
Q_OBJECT public:
test(); void send(){
emit testcall();
} signals:
void testcall(); public slots:
void testreveive(); } #endif // TEST_H
// test.cpp

#include "test.h"

test::test()
{ } void test::testreceive(){
qDebug() << "receive";
}
// mainwindow.cpp

#include "ui_mainwindow.h"
#include "test.h" MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
test t;
connect(&t, &test::testcall, &t, &test::testreceive);
t.send();
}

注意:使用 signals 标记信号函数,信号是一个函数声明,返回void,不需要实现函数代码

  使用 emit 可以发送信号

三.属性

QT5:第八章 信号与槽机制的更多相关文章

  1. qt中信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  2. Qt入门之信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  3. QT的信号与槽机制介绍

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

  4. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  5. Qt 的信号与槽机制介绍(10个要注意的问题)

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  6. 关于Qt信号与槽机制的传递方向性研究(结论其实是错误的,但是可以看看分析过程)

    最近由于项目的需求,一直在研究Qt.信号与槽机制是Qt的一大特色,该机制允许两者间传递参数,依次来实现对象间的通信.这个参数会分别存在于信号的参数列表和槽函数的参数列表中.需要注意的是,若将槽函数绑定 ...

  7. Qt信号和槽机制

    概述 信号和槽机制是QT的核心机制,要精通QT编程就必须对信号和槽有所了解.信号和槽是一种高级接口,应用于对象之间的通信,他是QT的核心特性,也是QT差别于其他工具包的重要地方.信号和槽是QT自行定义 ...

  8. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  9. 【QT学习】信号和槽机制

    QT中发射信号使用 emit 来完成. 类要使用信号和槽机制,必须从QObject或者QObject子类继承.必须在类的定义中加上 Q_OBJECT 宏. 信号和槽连接时,参数类型必须相同. 关键字大 ...

随机推荐

  1. E20190414-hm

    ease  n. 安逸; 容易; 轻松,舒适; 不拘束,自在; (for/with ease of) repetition n. 重复,反复; 背诵; 复制品,副本; [乐] 复唱,复奏,重奏; gl ...

  2. uoj#274. 【清华集训2016】温暖会指引我们前行(LCT)

    传送门 不难发现肯定是在温度的最大生成树上走是最优的 于是用\(LCT\)维护最大生成树,每一次加边时如果已经连通,就判断一下路径上的最小温度是否小于当前温度,是的话就断掉那条边,加入新边 //min ...

  3. 小奇的仓库(树形DP)

    「题目背景」 小奇采的矿实在太多了,它准备在喵星系建个矿石仓库.令它无语的是,喵星系的货运飞船引擎还停留在上元时代! 「问题描述」 喵星系有n个星球,星球以及星球间的航线形成一棵树. 从星球a到星球b ...

  4. 茅台【思维/数学/剪枝】By cellur925

    题目传送门 给你\(n\)根木棍,问有多少种方法,使得选出的三根木棍能组成三角形. 开始想要用搜索的,但是写着写着卡壳了(?),于是改用贪心,开始对拍,觉得很稳,只是最后两个数据可能有点卡.很第一题难 ...

  5. TensorFlow数据集(二)——数据集的高层操作

    参考书 <TensorFlow:实战Google深度学习框架>(第2版) 一个使用数据集进行训练和测试的完整例子. #!/usr/bin/env python # -*- coding: ...

  6. AngularJS - 入门小Demo

    AngularJS四大特效 MVC模式.模块化设计.自动化双向数据绑定.依赖注入 如果了解了后端开发知识,想必对这些词汇不会陌生,AngularJS融合了后端开发的一些思想,虽然身为前端框架,但与jQ ...

  7. VC 中TEXT、_T、L的区别

    http://i.cnblogs.com/EditPosts.aspx?opt=1 对于从VC++6.0转到VS2005编译环境中的程序员.往往会碰到字符集之间的转换. VC6.0采用的是ANSI字符 ...

  8. flask_context

    定义全局的钩子函数 有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子 例如在请求之前创建数据库连接或者redis连接:或者是系统里面用户请求处理之前先验证用户的身份,是否 ...

  9. ( 2018 Multi-University Training Contest 2)

    2018 Multi-University Training Contest 2) HDU 6311 Cover HDU 6312 Game HDU 6313 Hack It HDU 6314 Mat ...

  10. CF1072C Cram Time

    思路: 首先二分找到使x * (x + 1) / 2 <= a + b最大的x,然后令p = min(a, b), q = max(a, b),按照x,x - 1, ..., 1的顺序选取数字把 ...