当前位置: 首页 > news >正文

哪个网站做头像比较好湖南智能网站建设哪里好

哪个网站做头像比较好,湖南智能网站建设哪里好,优跃达官网网站建设项目,网站制作 福宁网络有限公司目录 概念 代码 mainwindow.h me.h xiaohuang.h main.cc mainwindow.cc me.cc xianghuang.cc mainwindow.ui 自定义信号的要求和注意事项: 自定义槽的要求和注意事项: 概念 信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式(发布-订…

目录

概念

代码

mainwindow.h

me.h

xiaohuang.h

main.cc

mainwindow.cc

me.cc

xianghuang.cc

mainwindow.ui

自定义信号的要求和注意事项:

自定义槽的要求和注意事项:


概念

信号槽是 Qt 框架引以为豪的机制之一。所谓信号槽,实际就是观察者模式(发布-订阅模式)。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。这就类似观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

信号 的本质就是事件

信号的呈现形式就是函数, 也就是说某个事件产生了, Qt框架就会调用某个对应的信号函数, 通知使用者。

槽函数是一类特殊的功能的函数,在编码过程中也可以作为类的普通成员函数来使用。之所以称之为槽函数是因为它们还有一个职责就是对Qt框架中产生的信号进行处理。

在Qt中信号和槽函数都是独立的个体,本身没有任何联系,但是由于某种特性需求我们可以将二者连接到一起,在Qt中我们需要使用QOjbect中的connect函数进二者的关联。

代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "me.h"
#include "xiaohuang.h"QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();//添加HungryBtn的槽函数void HungrySlot();private:Ui::MainWindow *ui;Me* _me;Xiaohuang* _xh;
};
#endif // MAINWINDOW_H

me.h

#ifndef ME_H
#define ME_H#include <QObject>class Me : public QObject
{Q_OBJECT
public:explicit Me(QObject *parent = nullptr);public slots:void eat();void eat(QString msg);};#endif // ME_H

xiaohuang.h

#ifndef XIAOHUANG_H
#define XIAOHUANG_H#include <QObject>class Xiaohuang : public QObject
{Q_OBJECT
public:explicit Xiaohuang(QObject *parent = nullptr);signals:void hungry();void hungry(QString msg);
};#endif // XIAOHUANG_H

main.cc

#include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

mainwindow.cc

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//方法一:标准信号和槽函数connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close);//方法二:自定义信号和槽函数_me = new Me;_xh = new Xiaohuang;//因为自定义的信号不能让qt框架去发送,所以我们用qt框架有的信号关联我们的自定义信号//间接去让他发送我们的自定义信号//a 这个是信号连接槽函数去间接发送信号//connect(ui->HungryBtn,&QPushButton::clicked,this,&MainWindow::HungrySlot);//b 现在我们信号连接信号//connect(ui->HungryBtn,&QPushButton::clicked,_xh,&Xiaohuang::hungry);//connect(_xh,&Xiaohuang::hungry,_me,&Me::eat);//但是对于带参的,Qt5这么写就有问题,因为重载了,所以编译器就不知道选带参还是不带的,所以有语法错误//我们就可以在外部定义一个函数指针来说明是带参的还是不带参的//void (Xiaohuang::* Xh1)() = &Xiaohuang::hungry;void (Xiaohuang::* Xh2)(QString) = &Xiaohuang::hungry;void (Me::* myp)(QString) = &Me::eat;//对于有传参的写法connect(_xh,Xh2,_me,myp);connect(_xh,Xh2,_me,myp);//我们上面是Qt5的信号和槽处理方式,现在我们来看Qt4的connect(_xh,SIGNAL(hungry()),_me,SLOT(eat()));//对于有传参的写法connect(_xh,SIGNAL(hungry(QString)),_me,SLOT(eat(QString)));connect(ui->HungryBtn,&QPushButton::clicked,this,&MainWindow::HungrySlot);//推荐使用Qt5,因为Qt4是宏替换,没有安全检查
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::HungrySlot()
{//按下按钮,发送自定义信号emit _xh->hungry();emit _xh->hungry("海鲜");
}

me.cc

#include "me.h"
#include <QDebug>Me::Me(QObject *parent) : QObject(parent)
{}void Me::eat()
{qDebug()<<"我带你去吃饭";
}void Me::eat(QString msg)
{qDebug()<<"我带你去吃:"<<msg;
}

xianghuang.cc

#include "xiaohuang.h"Xiaohuang::Xiaohuang(QObject *parent) : QObject(parent)
{}

mainwindow.ui

自定义信号的要求和注意事项:

  1. 信号是类的成员函数
  2. 返回值必须是 void 类型
  3. 信号的名字可以根据实际情况进行指定
  4. 参数可以随意指定, 信号也支持重载
  5. 信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
  6. 信号函数只需要声明, 不需要定义(没有函数体实现)
  7. 在程序中发射自定义信号: 发送信号的本质就是调用信号函数
    • 习惯性在信号函数前加关键字: emit, 但是可以省略不写
    • emit只是显示的声明一下信号要被发射了, 没有特殊含义
    • 底层 emit == #define emit
// 举例: 信号重载
// Qt中的类想要使用信号槽机制必须要从QObject类派生(直接或间接派生都可以)
class Test : public QObject
{Q_OBJECT
signals:void testsignal();// 参数的作用是数据传递, 谁调用信号函数谁就指定实参// 实参最终会被传递给槽函数void testsignal(int a);
};

自定义槽的要求和注意事项:

  1. 返回值必须是 void 类型

  2. 槽也是函数, 因此也支持重载

  3. 槽函数需要指定多少个参数, 需要看连接的信号的参数个数

  4. 槽函数的参数是用来接收信号传递的数据的, 信号传递的数据就是信号的参数

    • 举例:
      • 信号函数: void testsig(int a, double b);
      • 槽函数: void testslot(int a, double b);
    • 总结:
      • 槽函数的参数应该和对应的信号的参数个数, 从左到右类型依次对应
      • 信号的参数可以大于等于槽函数的参数个数 == 信号传递的数据被忽略了
        • 信号函数: void testsig(int a, double b);
        • 槽函数: void testslot(int a);
  5. Qt中槽函数的类型是多样的

    Qt中的槽函数可以是类的成员函数全局函数静态函数Lambda表达式(匿名函数)

  6. 槽函数可以使用关键字进行声明: slots (Qt5中slots可以省略不写)

    • public slots:
    • private slots: –> 这样的槽函数不能在类外部被调用
    • protected slots: –> 这样的槽函数不能在类外部被调用
// 槽函数书写格式举例
// 类中的这三个函数都可以作为槽函数来使用
class Test : public QObject
{public:void testSlot();static void testFunc();public slots:void testSlot(int id);
};
http://www.yayakq.cn/news/61375/

相关文章:

  • wordpress网站字体大小一个企业可以做几个网站
  • 亚马逊网站建设案例分析网站是哪家公司做的
  • 深圳工程造价建设信息网站html5网站案例
  • 哈尔滨建设网站公司大数据智能营销系统
  • 网站自适应尺寸商城首页设计
  • 网站死链如何处理玩游戏的网页
  • 手机网站触摸版网站建设购买数据库的流程图
  • 建设银行网站首页是多少平面设计模板素材网站
  • 男女做暖暖免费网站wordpress 插件开发教程
  • 顺德网站建设多少钱工业产品设计包括哪些
  • 宁夏网站建设电话汉服销售网站建设
  • 做网站哪家南京做网站拨付网站建设费用的报告
  • 网站开发企业需要什么资质建设网站的标语
  • 海兴网站建设公司烘焙类网站开发时代背景
  • 2018威胁网站检测平台建设信息门户网站建设报价
  • 买奢侈品代工厂做的产品的网站网站外链购买
  • 个人作品展示网站模板久久建筑网是山东省的吗
  • 铆钉机 东莞网站建设专业企业建站系统
  • dns是不是做网站用的网站推广行业
  • 弄一个微信小程序多少钱淘宝关键词优化技巧
  • 珠海 网站建设云霄网站建设
  • 医院网站建设医生需要做什么免费代刷网站推广
  • o2o网站建设效果企业管理系统项目经理招聘
  • 克拉玛依市区建设局网站海报设计大赛
  • 公司网站 正式上线菜谱wordpress
  • 手机站是什么意思做那个网站的图客比较好
  • 企业网站推广外包用ssh做的简单网站
  • 网站最近不收录北京做网络优化的公司
  • 成都公司建网站合山市网站
  • 阿里云 企业网站网站建设项目详情