ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt带参数的信号,和指针函数和函数指针

2020-02-25 23:51:03  阅读:551  来源: 互联网

标签:Widget Qt void 信号 函数指针 include myWidget singals 指针


一:Qt带参数的信号

main.cpp

#include "widget.h"
#include "slot.h"
#include <QApplication>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv); //查找QApplication()的相关资料
    Widget w; 
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "QPushButton"
#include <QDebug>
//#include "mypushbutton.h"  //自定义的按钮
Widget::Widget(QWidget *parent):QWidget(parent), ui(new Ui::Widget) //Widget为继承自QWidget类,该处为类外定义构造函数.
{
         ui->setupUi(this);
            QPushButton *btn1 = new QPushButton;
            btn1->setParent(this);
            btn1->setText("处理带参数的信号");
       QPushButton *btn2 = new QPushButton;
            btn1->setParent(this);
            btn1->setText("处理不带参数的信号");
/*由于两个信号采用的是函数重载,所以这里需要使用函数指针来区别开. 
* 函数指针:其本质是一个指向函数的指针,
* //简介下面的语句:“::”:用来限定作用域的
* void (myWidget::*myWidget_singals)(函数指针的参数) = &myWidget::my_singals;
* &myWidget::my_singals:表示信号(函数)的名字:我们把他看成一个变量名.而&myWidget::是用来告诉编译器函数是myWidget类中的
* (myWidget::*myWidget_singals):为函数指针名.:myWidget::指明他的作用域. * int c = 5; * int *p = &c;、
*/
 void (Widget::*myWidget_singals)() = &Widget::my_singals; //不带参数的信号
 void (Widget::*myWidget_singals1)(int,QString) = &Widget::my_singals; //带参数的信号
 connect(btn1,Widget_singals,this,&Widget::N_canshu); //处理不带参数信号.
 connect(btn2,Widget_singals1,this,&Widget::print_singals); //处理带参数的信号.
}
void Widget::print_singals(int c, QString a)  //处理带参数的信号.
{
    //str.toUtf8().data()由于是中文需使用.
    qDebug()<<"from is son Widget singals c and a "<<c<<a.toUtf8().data()<<endl;
}
void Widget::N_canshu()
{
qDebug()<<"没有参数";
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //命名空间 Ui
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void print_singals(int c,QString a); //处理带参数的槽函数
    void N_canshu(); //处理不带参数的槽函数
signals:
/*定义信号时必须加上关键字signals.
 * 信号没有返回值,但可以有参数.
 * 信号就是函数声明,只需声明,无需定义。
 * 使用emit发送.
 * 信号可以重载.
*/
void my_singals(); //自定义信号
void my_singals(int,QString); //带参数的信号.当发送这个信号的时候就在
private: Ui::Widget *ui;
};
#endif // WIDGET_H

二:指针函数和函数指针

 

标签:Widget,Qt,void,信号,函数指针,include,myWidget,singals,指针
来源: https://www.cnblogs.com/1314bjwg/p/12317229.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有