Qt带参数的信号

8 篇文章 0 订阅
6 篇文章 0 订阅
Qt带参数信号

信号也可以重载
但是connect是会发生二义性,编译器不知道要处理哪个信号,因为我发出的信号是有参和一个无参的

signal:
void mySignals();
void mySignals(int,QString);
emit:
emit mySignals(120,"我是小窗口");
emit mySignals();
connect:
//处理无参信号
connect(&t,TowWindow::mySignals,this,&MainWindow::gotomain);
//处理有参信号
connect(&t,TowWindow::mySignals,this,&MainWindow::gotomain);

解决这个二义性问题可以用函数指针指向无参或有参信号
信号本来就是一个函数
void (TowWindow::*a_signal)() = &TowWindow::mySignals;
给函数指针命名时要注意加上一个作用域,表示这个函数是属于TowWindow类的
指向的信号当然更要加上作用域,因为这个信号在TowWindow类里
带参数:
void (TowWindow::*b_signal)(int,QString) = &TowWindow::mySignals;

connect:
	void (TowWindow::*a_signal)() = &TowWindow::mySignals;
    connect(&t,a_signal,this,&MainWindow::prin);
    void (TowWindow::*b_signal)(int,QString) = &TowWindow::mySignals;
    connect(&t,b_signal,this,&MainWindow::gotomain);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Qt的`QSignalMapper`类来实现参数信号连接不参数的槽。`QSignalMapper`类提供了一种方法,可以将具有不同参数的多个信号映射到单个槽上。以下是一个简单的示例: ``` // 创建一个QSignalMapper对象 QSignalMapper *signalMapper = new QSignalMapper(this); // 连接参数信号到signalMapper上 connect(button1, SIGNAL(clicked()), signalMapper, SLOT(map())); connect(button2, SIGNAL(clicked()), signalMapper, SLOT(map())); connect(button3, SIGNAL(clicked()), signalMapper, SLOT(map())); // 设置映射规则,将每个按钮映射到一个整数 signalMapper->setMapping(button1, 1); signalMapper->setMapping(button2, 2); signalMapper->setMapping(button3, 3); // 连接signalMapper的mapped(int)信号到不参数的槽 connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(onButtonClicked(int))); ``` 在上面的示例,我们首先创建了一个`QSignalMapper`对象,然后将参数信号`button1`、`button2`和`button3`连接到`signalMapper`的`map()`槽上。接下来,我们设置映射规则,将每个按钮映射到一个整数。最后,我们将`signalMapper`的`mapped(int)`信号连接到不参数的槽`onButtonClicked(int)`上,以便在按钮被单击时调用该槽。当任何一个按钮被单击时,`signalMapper`将发出`mapped(int)`信号,其包含该按钮的整数映射值。然后,`onButtonClicked(int)`槽被调用,以便我们可以根据按钮的映射值来执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值