Qt中的 connect 函数

这篇具有很好参考价值的文章主要介绍了Qt中的 connect 函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、connect()函数实现的是信号与槽的关联。

注意:只有QO bject类及其派生的类才能使用信号和槽的机制

2、函数原型

static QMetaObject::Connection connect(const QObject *sender, const char *signal,const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);

static QMetaObject::Connection connect(const QObject *sender, const QMetaMethod &signal,const QObject *receiver, const QMetaMethod &method,
Qt::ConnectionType type = Qt::AutoConnection);

inline QMetaObject::Connection connect(const QObject *sender, const char *signal,const char *member, Qt::ConnectionType type = Qt::AutoConnection) const;

在第一个函数中:第一个参数为发射信号的对象,例如后面的dlg;第二个参数是要发射的信号,例如后面的SIGNAL(dlgReturn(int));

第三个参数是接受信号的对象,例如后面的this,表明是本部件,即Widget,当这个参数是this时,可以将其省略掉,因为在第三个函数中,该参数默认为this;第四个参数是要执行的槽,例如
后面的SLOT(showValue(int)),也可以指定一个信号,实现信号与信号的关联。

eg:

MyDialog *dlg=new MyDialog(this);//将对话框中的自定义信号与主界面中的自定义槽进行关联
connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
dlg->show();

注意:

1、对于信号与槽,必须使用SIGNAL()和SLOT()宏,它们将参数转化为const char *类型

2、第四个参数指定的槽声明时必须使用slots关键字。

eg:

private slots://槽的声明
void showValue(int value);
void on_label_linkActivated(const QString &link);

Qt中的connect信号和槽不在同一个线程

主线程中发出一个信号,另一个线程槽函数没有响应,这个问题搞了好几个小时,才发现原来是connect时候的第5个参数写错了,在这里做下备注吧。

connect用于连接qt的信号和槽,在qt编程过程中不可或缺。它其实有第五个参数,只是一般使用默认值,在满足某些特殊需求的时候可能需要手动设置。

Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。

Qt::DirectConnection:槽函数会在信号发送的时候直接被调用,槽函数运行于信号发送者所在线程。效果看上去就像是直接在信号发送位置调用了槽函数。这个在多线程环境下比较危险,可能会造成奔溃。

Qt::QueuedConnection:槽函数在控制回到接收者所在线程的事件循环时被调用,槽函数运行于信号接收者所在线程。发送信号之后,槽函数不会立刻被调用,等到接收者的当前函数执行完,进入事件循环之后,槽函数才会被调用。多线程环境下一般用这个。

Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。

Qt::UniqueConnection:这个flag可以通过按位或(|)与以上四个结合在一起使用。当这个flag设置时,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是避免了重复连接。文章来源地址https://www.toymoban.com/news/detail-567236.html

到了这里,关于Qt中的 connect 函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • qt中的取整函数

    在Qt中,有以下几种常用的取整函数,用于处理浮点数的取整操作: 1. **`qCeil()`** - 向上取整:    该函数返回大于或等于给定浮点数的最小整数。如果输入值是正数,它会将小数部分去掉并增加到下一个整数;如果是负数,它会返回与输入值相等的整数(即不改变负数的值)

    2024年04月29日
    浏览(29)
  • QT支持多种开发语言

    QT主要是一个C++应用程序框架,但它也提供了对其他一些编程语言的官方或非官方支持。以下是QT支持的一些语言版本及其特点。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.Python (PyQt)  : PyQt是QT的官方Python绑定,允许Python开发者使用QT库来创建

    2024年04月29日
    浏览(48)
  • VS开发QT项目,手写按钮槽函数避坑

    由于最近开发需要在VS2017上配置QT开发环境,进行QT项目的开发,之前从来没有这样使用过,在此记一些坑。 QT的槽函数是非常方便的,使用QT Creator可以自动生成代码,方便快捷。但是代码可读性不强,一些连接方面的信息都被隐藏了。由于之前一直使用QT Creator,所以其实还

    2023年04月13日
    浏览(37)
  • QT界面调用ui,定义主MainWindow中的子控件的槽函数

    在QT的应用中,不可避免需要使用QtDesigner,创建的ui如何调用呢,这里给出我的调用方法。  所有设计做完后,保存ui文件,终端输入: 得到ui.h文件,新建mainwindow.h文件,输入: 新建mainwindow.cpp文件,输入: 新建main.cpp文件,输入: 编译即可,编译需要编写pro文件。 除此之外,

    2024年02月12日
    浏览(40)
  • 【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 战斗背景:做了个串口接收界面,用来接收传输过来的信号。但是光用数字显示太单调,需要用图线显示出来。 战略目标:干掉它。 战术路线:Qt 绘图可以使用 Qt Charts,先了解

    2024年02月11日
    浏览(49)
  • 【VisualStudio】使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月10日
    浏览(76)
  • Qt——Qt connect问题

            这个错误是由于在`connect`函数中的lambda表达式修改了一个以非`const`引用方式传递的参数,而该参数本应当是不可修改的。在`currentTextChanged`信号发出时,它提供的是一个`const QString `参数,意味着不能修改传入的字符串。         错误的根源在于`QString value`应该

    2024年04月25日
    浏览(30)
  • 【VisualStudio】基于 Visual Studio 使用 C++ 语言开发 Qt 环境配置教程

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 先上一张效果图,具体步骤主要分为以下三步。 这一步不再赘述,注意一定要安装 C++ 语言。 可以参考这个教程 Visual Studio 2022安装与使用教程。 这一步也不再赘述,网上搜索教

    2024年02月15日
    浏览(66)
  • 【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 我要使用的功能比较简单,主要包含扫描串口、打开串口、发送数据、接收数据、暂停按钮、停止按钮,因此接下里将围绕这几个功能依次更新。 我的工程项目名字叫 “GUI”。

    2024年02月11日
    浏览(68)
  • 【Visual Studio】报错 C2653,使用 C++ 语言,配合 Qt 开发串口通信界面

    知识不是单独的,一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏:Visual Studio。 这个 Bug 是我做这个工程时遇到的:【Visual Studio】Qt 的实时绘图曲线功能,使用 C++ 语言,配合 Qt 开发串口通信界面。 使用 C++ 语言,配合 Qt 开发串口通信界面,在添加 Widget 做

    2024年02月11日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包