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

一: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

二:指针函数和函数指针

原文地址:https://www.cnblogs.com/1314bjwg/p/12317229.html

时间: 2024-10-08 17:49:32

Qt带参数的信号,和指针函数和函数指针的相关文章

Qt 信号槽如何传递参数(或带参数的信号槽)

                                信号槽如何传递参数(或带参数的信号槽) 利用Qt进行程序开发时,有时需要信号槽来完成参数传递.带参数的信号槽在使用时,有几点需要注意的地方,下面结合实例进行介绍. 第一点:当信号与槽函数的参数数量相同时,它们参数类型要完全一致. signals: void emitdata(int); private slots: void getdata(int); // 具体实现 qDebug() << "int : "

Python--高阶函数、函数嵌套、名称空间及变量作用域、闭包、装饰器

1.高阶函数(map/reduce/filter) 高阶函数是指函数的参数可以是函数 这篇总结几个常用的高阶函数:map/reduce/filter map函数.reduce函数.filter函数都是Python中的内建函数. map函数 map函数的作用是将一个函数作用于一个序列的每一个元素,一行代码即可完成,不需要用我们平常喜欢用的循环.map将运算进行了抽象,我们能一眼就看出这个函数是对一个序列的每个元素进行了同样的一个操作.map()函数接收两个参数,一个是函数,一个是Iterable,

带参数的main函数的使用

以前接触的main函数都是不带参数的.因此main 后的括号都是空括号.  main() {   ...  } 实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数. C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv.因此,main函数的函数头可写为: main(argc,argv) C语言还规定argc(第一个形参)必须是整型变量,argv(第二个形参)必须是指向字符串的指针数组.加上形参说明后,main函数的函数头应写为: main (int

带参数的main函数

第一个带参数的main. #include <iostream.h> int main(int argc,char *argv[]) { for(inti=0;i<argc;i++) { cout<<argv[i]<<'\t'; // } return0; } /* int argc, char **argv 用于运行时,把命令行参数传入主程序. argc -- 命令行参数总个数,包括 可执行程序名. argv[i] -- 第 i 个参数. argv[0] --

【转】带参数的主函数

带参数的主函数 一般情况下(许多教科书中都没有说明),我们在写程序的时候,往往忽略了主函数的参数,例如: int main() { … return 0; } 在命令行下,输入程序的名称就可以运行程序了.实际上,我们还可以通过输入程序名和相关的参数来为程序的运行提供更多的消息.参数紧跟在程序名后面,参数之间用空格分开. 这些参数被称为:command-line arguments(命令行参数),也往往被称为程序的argument list(参数表).例如,在Linux终端,用户可以输入ls –l

js循环动态绑定带参数函数遇到的问题及解决方案[转]

今天写原生javascript时,想利用绑定事件实现类似jquery中on方法的功能:于是有了for循环里绑定事件,无意中发现定义类能解决好多问题! 例如:一个不确定长度的列表,在鼠标经过某一条的时候改变背景 1 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Qt带返回值的信号发射方式(使用QMetaObject::invokeMethod)

一般来说,我们发出信号使用emit这个关键字来操作,但是会发现,emit并不算一个调用,所以它没有返回值.那么如果我们发出这个信号想获取一个返回值怎么办呢? 两个办法:1.通过出参形式返回,引用或者指针的方式带回:比如emit sig(int& i)或者emit sig(void* pointer),但是这个方法有一个弊端,稍后介绍第二种方式会提醒. 2.通过qt自带的invoke机制调用:参考文档对QMetaObject::invokeMethod的说明:Invokes the member

C言语指针变量作为函数参数

在C言语中,函数的参数不只可所以整数.小数.字符等详细的数据,还可所以指向它们的指针.用指针变量作函数参数可以将函数内部的地址传递到函数外部,使得在函数外部可以操作函数内部的数据,而且这些数据不会跟着函数的完毕而被烧毁.像数组.字符串.静态分派的内存等多是一系列数据的聚集,没有方法经过一个参数全体传入函数外部,只能传递它们的指针,在函数外部经过指针来影响这些数据聚集.有的时分,关于整数.小数.字符等根本类型数据的操作也必需要借助指针,一个典型的例子就是交流两个变量的值.有些初学者能够会运用下面的

编程题:指针变量作函数参数,将两个整数按由大到小的顺序输出。

分析:通过指针变量作函数参数,无需返回值和全局变量,主调函数就可以使用被调用函数改变的值. #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main() { int a=3,b=4; int *ptr1,*ptr2; ptr1=&a;ptr2=&b; if(a<b) swap(ptr1,ptr2); printf("%d,%d\n",