Ubuntu中qt类与类信号槽的创建及使用

news2024/9/19 10:40:47

今天学习到了新的一个小玩意,我们在QT中创建一个大项目的时候一般会创建多个类,那我们就来学习一下如何在自定义的类中声名和使用信号与槽函数。

首先我们CTRL+n来创建我们新的类:

我们创建新的C++的类,一个School,一个Students。

我使用的是Cmake!!!!不是qmake!!!!!!!!

创建好之后呢,我们要先声名一下我们的两个类 ,看代码:(在mainwindow.h)

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "school.h"//声名school
#include"student.h"//声名student


QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class School;
class Student;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
    
    School *school;    //实例化
    Student *student;    //实例化
};
#endif // MAINWINDOW_H

然后到我们的school 类中,我们在signals:(信号)这里定义我们的信号方法

#ifndef SCHOOL_H
#define SCHOOL_H

#include <QObject>

class School : public QObject
{
    Q_OBJECT
public:
    explicit School(QObject *parent = nullptr);

signals://信號
    void sendMessages();
};

#endif // SCHOOL_H

同样的在student中也要定义,这里定义的是槽。

这里有个重要的知识点,就是信号只声名就可以,但是槽要声名后还要定义!!!

#include "student.h"
#include"iostream"

using namespace std;
Student::Student(QObject *parent)
    : QObject{parent}
{}

void Student::comeBackToClass()
{
    cout << "student go to school" <<endl;
}

这里我们简单的定义一下,我们使用cout方法输出一下就好。

最后我们要在mainwindow.cpp中连接了,连接的格式如下

connect (信号, SIGNAL(你声名的信号函数) , 槽,SLOT(你声名的槽函数));

 

#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include "debug/debug.h"
#include "iostream"

using namespace std ;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    school = new School(this);
    student = new Student(this);

    connect(school, SIGNAL(sendMessages()),student, SLOT(comeBackToClass()));
    emit school->sendMessages();

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    cout << "open the clicked" <<endl;
}

 这样 我们就将两个类连接到一起了。!!!

下课

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2091825.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

举办知识竞赛是线上好还是线下好

举办知识竞赛线上和线下各有优势&#xff0c;选择哪种方式取决于具体的需求和条件。 线上举办知识竞赛的优缺点&#xff1a; 优点&#xff1a; 便捷性&#xff1a;线上竞赛不受地域限制&#xff0c;参与者可以在任何有网络的地方参与。 选手数&#xff1a;可以同时满足人数较…

单门店共享自习室小程序系统源码搭建对接门禁和空开api

共享自习室小程序&#xff0c;单门店共享自习室小程序&#xff0c;有源码&#xff0c;对接门禁和电控api接口&#xff0c;php开发语言&#xff0c;前端是uniapp。可以源码搭建&#xff0c;也可以二开或定制。 一 用户端 在线选择预约时间&#xff0c;选择座位&#xff0c;选择…

macOS搭建Python3.11+Django4.2.15的平台框架使用Poetry管理

最近想使用Python开发&#xff0c;使用Django框架搭建平台&#xff0c;之前没有使用过Python&#xff0c;所以记录下整个过程&#xff1a; 1、Python版本的选择&#xff0c;直接去官网【Download Python | Python.org】看最新稳定版是哪个版本&#xff0c;选择安装&#xff0c…

Ascend C算子开发(入门)—— 什么是算子?

文章目录 Ascend C算子开发&#xff08;入门&#xff09;—— 什么是算子&#xff1f;一、从人工智能到算子1.1 人工智能的四个层面1.2 人工智能之三大流派1.3 算子、神经元、神经网络 二、算子的基本概念2.1 算子在数学中的定义&#xff1a;2.2 算子基本概念 —— 总览2.3 算子…

利用clip模型实现text2draw

参考论文 实践 有数据增强的代码 import math import collections import CLIP_.clip as clip import torch import torch.nn as nn from torchvision import models, transforms import numpy as np import webp from PIL import Image import skimage import torchvision …

基于单片机的楼宇消防控制系统设计

本设计基于单片机的楼宇消防控制系统&#xff0c;主要包括温湿度检测模块、空气质量检测模块、火焰检测模块、ZigBee通信模块、报警模块和自动喷水模块。首先&#xff0c;系统通过温湿度检测模块实时监测楼道内的温湿度状况&#xff0c;以便及时掌握火灾发生前的环境变化。其次…

足底筋膜炎怎么治疗效果好

足底筋膜炎的症状 足底筋膜炎是一种常见的足部疾病&#xff0c;主要表现为足底区域&#xff08;尤其是脚跟附近&#xff09;的疼痛和不适。这种疼痛在早晨起床或长时间休息后初次站立时尤为明显&#xff0c;被形象地称为“晨间痛”。随着行走时间的增加&#xff0c;疼痛可能会…

直击源头!劳保鞋厂家揭秘机械制造业防护安全鞋挑选秘籍

在机械制造业这一高风险、高强度的行业中&#xff0c;选择合适的劳保鞋对于保障工人的安全至关重要。作为劳保鞋的生产厂家&#xff0c;我们深知一双优质的防护鞋能为工人提供怎样的保护。今天百华小编和大家从多个维度看一下机械制造业是如何挑选防护安全鞋的挑选秘籍&#xf…

四款远程控制分享!你pick哪一款?

远程控制软件已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是远程办公、技术支持还是家庭娱乐&#xff0c;这些软件都扮演着重要的角色。今天&#xff0c;我们就来聊聊几款市面上比较热门的远程控制软件在电脑远程操作上都有哪些表现呢&#xff1f;让我们一探究竟。…

ArkTS语法题

1. 下面示例中会导致编译报错的有&#xff1f; A. let x: number null&#xff1b; B. let x: number | null null&#xff1b; C. let y: string null&#xff1b; D. let y: string 100&#xff1b; 看来GPT对这种标准概念选择&#xff0c;也没有统一的说法。 - 文心…

【3.8】贪心算法-解无重叠区间

一、题目 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&#xff0c;剩下的区间没有重叠…

ImportError: Missing optional dependency ‘openpyxl‘.报错已解决

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言&#xff1a; 在开发过程中&#xff0c;你是否遇到过导入模块时出现ImportError: Missing optional dependency openpyxl的…

绘制YOLOv9训练结果的mAP0.5变化曲线

本文绘制mAP0.5在训练过程中的变化曲线&#xff08;Python脚本&#xff09;&#xff0c;用以比较不同算法的收敛速度&#xff0c;最终精度等&#xff0c;并且能够在论文中直观的展示改进效果。 以下是比较了三个模型的mAP0.5变化曲线&#xff0c;数据来源是直接读取三个训练完…

Flink1.14.* 各种算子在StreamTask控制下如何调用的源码

前言&#xff1a;一、StreamTask执行算子的生命周期二、 Source的streamTask用的是SourceStreamTask三、基础转换操作&#xff0c;窗口用的是OneInputStreamTask1、初始化OneInputStreamTask2、StreamTask运行invoke调用的是StreamTask的processInput方法3、从缓冲区获取数据放…

从0到DevOps(1)-初步了解DevOps和容器

DevOps从提出以来陆续成为行业普遍实践&#xff0c;目前是数字化生产普遍不可或缺的信息底座。本系列文章旨在系统性的阐述与认识DevOps, 了解企业实践里DevOps的实际面貌。 什么是DevOps? DevOps 是一套实践、工具和文化理念&#xff0c;为实现用户不断的软件功能和可用性要…

学会这5个AI变现方法,让你在小红书上轻松赚钱!

大家好&#xff01;最近AI真是大火&#xff0c;尤其是ChatGPT、Midjourney这些AI工具&#xff0c;感觉不搞点AI相关的内容&#xff0c;都跟不上潮流啦&#xff01; 作为一个深耕小红书的内容创作者&#xff0c;我发现AI其实在小红书上有着巨大的变现潜力。 那么&#xff0c;如…

C--四种排序方法的补充

上一篇文章因为时间原因只写了三种&#xff0c;这一篇来补充第四种&#xff0c;第四种的代码更多&#xff0c;所需要理解的也是更多的。 堆排序 想要学会堆排序&#xff0c;你必须了解二叉树的内容。堆排序的排序速度也是非常的快。 这里都已大堆为例 1.向上调整算法&#…

JavaWeb - Spring Boot

Spring 官网​​​​​Spring | Home Spring Boot Spring Boot是一个由Pivotal团队提供的开源框架&#xff0c;旨在简化Spring应用的初始搭建以及开发过程。在Spring Boot项目中&#xff0c;通常会有Controller、Service、Mapper和Entity等层次结构。下面将详细介绍这些层次的…

Mac 安装Hadoop教程

1. 引言 本教程旨在介绍在Mac 电脑上安装Hadoop&#xff0c;便于编程开发人员对大数据技术的熟悉和掌握。 2.前提条件 2.1 安装JDK 想要在你的Mac电脑上安装Hadoop&#xff0c;你必须首先安装JDK。具体安装步骤这里就不详细描述了。你可参考Mac 下载JDK8。 2.2 配置ssh环境…

三分钟讲明白怎么用Fusion360和3D打印做模具

前言 模具&#xff0c;这东西听起来好像很常见&#xff0c;但是听到价格又很高大上&#xff0c;但是现在好消息是你可以在家里用3D打印方式实现一个模具&#xff0c;虽然是一个学习级的简易模具但是符合模具的9成要素 这里我们设计一个可以把热熔胶变成实物的模具 如何实现 1首…