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

杂志网站建设方案最新新闻消息

杂志网站建设方案,最新新闻消息,遵义网页制作招聘,网络服务商英文一、信号与槽 1、什么是信号与槽? 信号和槽是用于对象之间的通信,它是Qt的核心机制,在Qt编程中有着广泛的应用。如果想学好Qt,一定要充分掌握信号的槽的概念与使用。 2、信号和槽的代码实例 在Qt中,发送对象、发送的信…

一、信号与槽

1、什么是信号与槽?

信号和槽是用于对象之间的通信,它是Qt的核心机制,在Qt编程中有着广泛的应用。如果想学好Qt,一定要充分掌握信号的槽的概念与使用。

2、信号和槽的代码实例

在Qt中,发送对象、发送的信号、接收对象、槽可以通过很多种方式连接。下面通过一些例子逐一做演示,如下:

2.1、Qt4使用宏

在Qt4及之前的版本基于connect+宏实现信号与槽绑定,其中发送信号和槽函数需要用 SIGNAL() 和 SLOT() 来进行声明,connect函数声明如下:

QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

比如点击登录按键完成登录的例子,代码可以这样写:

// 槽函数声明
private slots:void login();

通过connect绑定槽函数,如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 登录按键绑定槽函数connect(this->ui->btn_ok, SIGNAL(clicked(bool)), this, SLOT(login()));}void MainWindow::login()
{QString username = ui->lineEdit_username->text();QString password = ui->lineEdit_password->text();if (username == "jack" && password == "12345") {qDebug() << "login success";} else {qDebug() << "login fail";}
}

注意:

  • 声明槽函数要使用private slots或public slots关键字
  • 信号和槽参数不能包含任何变量名,只能包含类型

2.2、使用Qt Creator添加信号的槽函数

通过Qt Creator 界面来完成发送信号和槽函数的连接,比如右键点击一个按钮,然后选择“转到槽”:

在这里插入图片描述

Qt Creator会自动生成如下代码,首先是槽函数的声明:

// 槽函数声明
private slots:void on_btn_cancel_clicked(bool checked);

槽函数实现,如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_btn_cancel_clicked(bool checked)
{}

使用这种方法不需要使用connect函数将信号与槽函数做连接。 这里槽函数的命名有一定的规则,一般是 on_objectname_signal 这样来命名的。这种方法优点是减少了手动敲代码的工作量,缺点是究竟有哪些信号与槽函数做了连接不易被发现,没有connect 函数看起来直观。

2.3、Qt5新connect函数

Qt5推出了新的connect函数,不需要使用SIGNAL()和SLOT()宏,可以在编译时做类型检查,connect函数声明如下:

QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)

使用这种方法槽函数的声明不需要放到slots中,只要像普通的函数一样声明就可以了,类型需要与信号保持一致,下面给登录按键绑定槽函数,如下:

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();// 声明槽函数,与普通的成员函数一样void login();private:Ui::MainWindow *ui;
};

绑定槽函数

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 登录按键绑定槽函数connect(ui->btn_ok, &QPushButton::clicked, this, &MainWindow::login);
}void MainWindow::login()
{qDebug() << "login";
}

2.4、使用函数指针

在Qt 5版本的connect 函数里,信号与槽函数的参数其实都是函数指针,当信号或槽函数有重载时,使用函数指针可以明确告诉编译器使用哪一个重载函数避免歧义

public:MainWindow(QWidget *parent = nullptr);~MainWindow();// 声明两个同名的login函数void login();void login(int state);

通过函数指针绑定槽函数

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 定义函数指针(注意:声明指向成员函数的指针时,要增加类作用域)void (MainWindow::*pfnLoginSlot)() = &MainWindow::login;// 登录按键绑定无参槽函数connect(ui->btn_ok, &QPushButton::clicked, this, pfnLoginSlot);
}void MainWindow::login()
{qDebug() << "login";
}void MainWindow::login(int state)
{qDebug() << "login state";
}

2.5、使用Lambda表达式

在connect函数中,槽函数参数可以改用Lambda表达式的方式来进行传参。使用 Lambda表达式的好处是代码的书写更加方便快捷,同时不需要在类中对槽函数做任何的声明了

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 使用Lamdbda表达式作为槽函数connect(ui->btn_ok, &QPushButton::clicked, this, [=](){qDebug() << "login";});
}

3、小结

信号与槽提供了一种事件触发机制,发送者与接收者通过connect链接在一起,发送者与接收者之间是松耦合

http://www.dinnco.com/news/19592.html

相关文章:

  • 哈尔滨有网站的公司如何屏蔽百度广告推广
  • 宝鸡网站建设seo建网站不花钱免费建站
  • 网上购物型网站福州关键词排名软件
  • 响应式电影资讯网站网站建设及网络推广
  • 文登住房与建设局网站今日新闻国际头条新闻
  • 加强门户网站建设的通知北京网络营销咨询公司
  • wordpress mingleseo页面排名优化
  • 网站主色调有几种手机优化大师下载安装
  • 网站域名备案与不备案的区别满十八岁可以申请abc认证吗
  • 河北农业网站建设公司刷赞网站推广永久
  • 江西万通建设有限公司网站app引流推广软件
  • 做推广有什么好网站汕头网站优化
  • 网站被黑能查到是谁做的吗站长工具查询seo
  • 做企业网站那家好知乎怎么申请关键词推广
  • 白云区做网站公司厦门seo外包
  • 好用的软件下载网站天津百度关键词seo
  • 建设网站 翻译宁波seo优化服务
  • 政府部门网站开发项目建设背景网络营销有哪些内容
  • 不改域名和空间 只改网站类型域名注册网站
  • dwcc2017怎么做网站免费seo网站自动推广软件
  • app手机电视网站设计方案北京网站推广排名外包
  • 什么nas可以做网站服务器西安网站seo排名优化
  • 铁路工程建设材料预算价格2网站沪深300指数基金
  • 网站内容规划怎么写柳州网站建设哪里有
  • 谷歌网站地图在线生成近两年网络营销成功案例
  • 经典网站设计个人免费网站申请注册
  • 价格低文案宁波seo如何做推广平台
  • 不用淘宝客api如何做网站网络销售公司怎么运作
  • 郑州网站优化推广dw网页设计模板网站
  • b2c网站建设价格站长之家怎么用