Qt 信号与槽自动关联

2023-11-07

被动关联与自动关联区别:

被动关联:也就是我们经常使用的connect函数,显示的指定SIGNAL和SLOT。
自动关联:隐式指明信号与槽的关系,主要利用部件设置的Objectname与信号signal名字关联。

自动关联说明:


规则要求1:
自动关联槽函数命名:

void on_<object name>_<signal name>(<signal parameters>);
objectName:部件的名字,通过setObjectName成员函数设置。
signalname:也就是我们信号名字,
signal parameters:形参

规则要求2:
调用connectSlotsByName

[static] void QMetaObject::connectSlotsByName(QObject *object)

官网翻译:

调用connectSlotsByName将会递归搜索该对象的所有子对象,自动关联子部件符合
void on_<object name>_<signal name>(<signal parameters>);的槽函数。

例如我们对象的对象中有一个对象名为button1的QPushButton,那么这个匹配的槽将是:
void on_button1_clicked();

自动关联举例:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QMetaObject>
class UI;
class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
public slots:
    void on_ok_btn_clicked();
    void on_cancle_btn_clicked();
private:
    UI *ui;
};

class UI
{
public:
    UI(QWidget * parent = 0);
private:
    QPushButton *ok_btn;
    QPushButton *cancle_btn;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    ui = new UI(this);
    QMetaObject::connectSlotsByName(this);
}

Widget::~Widget()
{

}

void Widget::on_ok_btn_clicked()
{
   qDebug()<<"on_ok_btn_clicked";
}

void Widget::on_cancle_btn_clicked()
{
  qDebug()<<"on_cancle_btn_clicked";
}

 UI::UI(QWidget * parent)
{
      ok_btn = new QPushButton(parent);
      ok_btn->setObjectName("ok_btn");
      ok_btn->setText("OK");
      ok_btn->setGeometry(0,0,60,30);
      cancle_btn = new QPushButton(parent);
      cancle_btn->setObjectName("cancle_btn");
      cancle_btn->setText("cancle");
      cancle_btn->setGeometry(100,0,60,30);
}

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

输出:

疑问:


为什么UI类中并没有继承Object类,以及UI类中并没有Q_OBJECT关键字,也能关联信号与槽?

 嘿嘿,你知道吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt 信号与槽自动关联 的相关文章

  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • QAbstractItemModel 如何表示树?

    我仍然很难理解 QAbstractItemModel 对项目的表示 有两种返回 QModelIndex 项的方法对我来说没有任何意义 QModelIndex QAbstractItemModel index int row int colu
  • Qt:更改 Mac OS X 上的应用程序 QMenuBar 内容

    我的应用程序对多个 页面 使用 QTabWidget 其中顶级菜单根据用户所在的页面而变化 我的问题是 尝试重新创建菜单栏的内容会导致严重的显示问题 它在除 Mac OS X 之外的所有平台上按预期使用第一种和第三种样式 尚未测试第二种 但
  • 在 Qt GraphicsView 中创建长线(或十字线)光标的最佳方法

    创建长十字线光标 与视口一样长 的简单方法是创建一条十字线graphicsItem 当鼠标移动时 设置该项目的pos财产 但是当场景复杂时这种方式会很慢 因为它要更新整个视口来更新光标的pos 另一种简单的方法是setCursor QCur
  • Qt:将数字转换为 QString、QVariant 或 QString::number 哪个更好

    我只是好奇 比方说 我需要在控制台中输出一个数字 代码是 include
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 为按钮控件 Qt Widgets 样式表定义多种样式

    如何在一个样式表中为一种控件定义多种样式 这样以后开发人员就可以选择控件应该是什么样子的样式 例如 我需要定义两种样式QPushButton 用于普通按钮 左侧 和操作按钮 右侧 对于第一个按钮 我编写了以下样式 QPushButton b
  • 使用 qt 创建和使用共享库

    我对共享库很陌生 所以我对如何创建 使用共享库有疑问 我正在使用 Qt Creator 和 qt 5 4 2 以及 Microsoft Visual C 11 0 编译器 在我的项目中 我需要创建一个 dll 它从外部库调用函数 有 h l
  • Android 上与 Qt 5.2 的蓝牙通信[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想使用 Qt 框架使我的 Android 设备能够通过蓝牙进行通信 截至今天 Qt 5 2 是最新的 据我所知 尚不支持蓝牙 在本页
  • QTextEdit 与 QPlainTextEdit

    有什么区别QTextEdit and QPlainTextEdit 为什么要使用其中一种而不是另一种 我正在编写一个文本编辑器作为学习 Qt5 的练习 现在我想知道是否使用QTextEdit or QPlainTextEdit 到目前为止我
  • 暂停 python 脚本直到事件发生,而不挂起/阻止 GUI

    尝试使用 Kivy 从 PyQt 迁移 我什至无法想象解决方案 我有数千行代码 使用 Qt 的对话框进行文本输入 也就是说 当到达他们的代码行时 他们会 停止 脚本 直到按下 确定 按钮 以便他们可以返回文本输入 Kivy 没有该功能 因此
  • QtCreator:找不到有效的套件

    在 Windows 7 上仅安装了 IDE 我想创建一个纯 C 项目 非 QT 项目 但是我收到错误 未找到有效的套件 当我单击 选项 gt 套件 时 我看到桌面 默认 套件 并且没有显示任何错误 我收到错误是因为我没有安装 Qt 库吗 如
  • Qt 文本选择白线和文本宽度

    我想在 QTextEdit 中自定义文本选择 我想要两件事 选择时删除空格 线条 能够选择选择的宽度 或者小部件宽度 或文本宽度 空白 线条 通常 我想要的是 来自 Bear 应用程序 熊文本选择 在使用 QTextEdit 小部件时 我注
  • QComboBox:仅在展开时显示图标

    从 正常 开始QCombobox 我想要一个QCombobox仅在展开时显示图标 但在折叠时不显示图标 我找到了类似问题的几个答案 但它们都显示了更复杂情况的代码 而我还没有设法提炼出它的核心 我见过两种方法 QListView或使用QIt
  • Qt:使用 QObject::connect 指定多种连接类型

    我想知道是否可以指定多种连接类型 例如 我希望我的连接类型是排队连接和唯一连接 是否可以在一份声明中具体说明这一点 QObject connect ptrSender SIGNAL ptrReceiver SLOT Queued and u
  • QImage 转换为 QML

    我的应用程序通过网络接收 JPEG 实时流 每秒 16 帧 直播流应使用 QML 显示 接收部分是用C 编写的 所有UI都是用QML编写的 如何将图像数据输入 QML 窗口 我已经研究过如何显示 QImage 但还没有找到解决方案 实现 Q
  • 如何使用 C++ 更新 QML 文本

    我有一个小问题 有人可以告诉我如何从 C 更新 qml 文本吗 我有一个使用线程的示例 但我不想应用此方法 因为我不知道如何设置 run 函数中的参数 要完全理解我 这里是我的代码 在启动线程时的主函数中 我想放置自定义文本或具有文本的字符
  • 超越堆栈采样:C++ 分析器

    黑客的故事 日期是 2010 年 2 月 12 日 圣诞节前的日子已经过去了 作为一名 Windows 程序员 我几乎遇到了一个主要障碍 我一直在使用 AQTime 我尝试过 sleepy shiny very sleepy 就在我们说话的
  • 在 Qt 5.12 的 OpenCV dll 上找不到入口点

    TLDR 将 OpenCV 与 QT MingW 链接会使应用程序在调试时崩溃 但不会在发布时崩溃 我正在尝试在基于 Qt 的大型多操作系统项目中使用 OpenCV 我已经轻松地为 Mac 和 Linux 构建了 OpenCV 但在 Win
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt

随机推荐

  • QT学生信息管理系统

    QT学生信息管理系统 项目描述 效果图 登录页面 管理员页面 用户页面 数据库表 用户表 学生表 项目描述 使用QT5 14和SQLite3 本项目分为登录界面 管理员界面 用户界面等界面 使用QStackedLayout实现页面布局及切换
  • 10大网络安全攻击手段及防御方法总结(下)

    6 分布式拒绝服务 DDOS DDoS攻击本身不能使恶意黑客突破安全措施 但会令网站暂时或永久掉线 相关数据显示 单次DDOS攻击可令小企业平均损失12 3万美元 大型企业的损失水平在230万美元左右 DDoS旨在用请求洪水压垮目标Web服
  • JAVA求解【乱序整数序列两数之和绝对值最小】

    题目 给定一个随机的整数 可能存在正整数和负整数 数组 nums 请你在该数组中找出两个数 其和的绝对值 nums x nums y 为最小值 并返回这个两个数 按从小到大返回 以及绝对值 每种输入只会对应一个答案 但是 数组中同一个元素不
  • 移动端H5页面在微信浏览器内audio无法自动播放问题解决

    相信许多小伙伴都遇见过这话种情况 在微信浏览器内添加的audio 无法自动播放 之前写过好多那种活动页添加的背景音乐都可以自动播放 直到后来ios 增加了限制就出现了这个问题 怎么解决的只需给audio标签增加一个属性就可以解决如下图
  • 二、MySQL入门

    1 如何查看MySQL是否运行 1查看进程 root sc mysql ps awx grep mysqld 12953 pts 1 S 0 00 bin sh usr local mysql bin mysqld safe datadir
  • JVM运行原理及Stack和Heap的实现过程

    Java语言写的源程序通过Java编译器 编译成与平台无关的 字节码程序 class文件 也就是0 1二进制程序 然后在OS之上的Java解释器中解释执行 而JVM是java的核心和基础 在java编译器和os平台之间的虚拟处理器 注 本网
  • js wangEditor富文本编辑器

  • 收藏清单:Java测试相关资源汇总

    收藏清单 Java测试相关资源汇总 Virtual environments 虚拟化环境 Vagrant 配置简单可信赖的虚拟化环境管理工具 Docker docker就不用多说了 Performance stress load 性能测试
  • 36-Jenkins-Job迁移

    Job迁移 前言 1 安装插件 2 配置信息 3 使用插件 前言 本篇来学习Jenkins中如何快速迁移job 在工作中可能会遇到这样的场景 即需要把一个Jenkins上的job迁移到另外一台Jenkins上 那怎么做比较好呢 一起来学习下
  • Shader Graph2-PBR介绍之表面属性(图解)

    PBR的实现由光线和表面属性决定 下面我们介绍一下表面属性 这个5个属性在ShaderGraph的根节点是经常的看到 左侧是Unity中的 右侧是UE中的 在没有Metallic金属的情况下 基础颜色值就决定了颜色的漫反射值 也就是说基础颜
  • gitee在README.md中添加图片

    前言 在使用gitee的添加README md文件的时候 有时候会希望能放一些效果图来实现展示效果 实现步骤 1 在项目中添加你的效果图片 比如我的就放在 assets 1 png 然后提交上去 2 打开你的项目 找到刚到图片 然后点击 3
  • Elasticsearch学习系列一(部署和配置IK分词器)

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • 基于深度学习的图像分类任务实现(二)卷积神经网络分类器&基于Residual Bolck的卷积神经网络分类器

    文章目录 1 代码编写思路 2 卷积神经网络分类器 2 1基本原理 2 2 代码实现 2 3 运行结果 3 基于Residual Bolck的卷积神经网络分类器 3 1基本原理 3 2代码实现 3 3模型结构可视化 3 4运行结果 实现多种
  • 【python实战】爬一爬某二手车的买卖数据

    获取当前页面下的车型的 表显里程 等数据 结果如下 直接讲代码实现 代码实现基本分四步 1 发送请求 2 获取数据 3 解析数据 4 保存数据 1 发送请求 import requests url https www XXX com chi
  • redis-dump 安装与简单使用

    redis dump是将redis和json互转的工具 redis dump是基于ruby开发 需要ruby环境 而且新版本的redis dump要求2 2 2以上的ruby版本 centos中yum只能安装2 0版本的ruby 需要先安装
  • Linux命令大全(手册)

    http man linuxde net
  • 超全面的前端工程化配置指南

    前端工程化配置指南 本文讲解如何构建一个工程化的前端库 并结合 Github Actions 自动发布到 Github 和 NPM 的整个详细流程 示例 我们经常看到像 Vue React 这些流行的开源项目有很多配置文件 他们是干什么用的
  • hive相关汇总

    hive 1 hive 有哪些方式保存元数据 各有哪些特点 2 hive内部表和外部表的区别 3 生产环境中为什么建议使用外部表 什么时候使用内部表 什么时候使用外部表 4 你们数据库怎么导入hive 的 有没有出现问题 5 简述Hive中
  • vue项目如何播放m3u8格式视频

    vue项目如何播放m3u8格式视频 安装依赖 找到public index html 再要播放的地方 1 引入 2 注册 3 使用组件 4 样式自己调整 5 双击可全屏 结果 安装依赖 npm install easydarwin easy
  • Qt 信号与槽自动关联

    被动关联与自动关联区别 被动关联 也就是我们经常使用的connect函数 显示的指定SIGNAL和SLOT 自动关联 隐式指明信号与槽的关系 主要利用部件设置的Objectname与信号signal名字关联 自动关联说明 规则要求1 自动关