已解决
qt 重载信号,使用““方式进行connect()调用解决方案
来自网友在路上 11228122提问 提问时间:2023-11-19 09:59:43阅读次数: 122
最佳答案 问答题库1228位专家为你答疑解惑
问题
在Qt中,重载的信号默认是无法使用&这种方式调用的。
因为&只能绑定到一个具体的信号,而重载的信号名称相同,编译器无法确定要绑定哪一个信号。
解决方案
如果非要使用&
绑定重载的信号,可以使用函数指针进行转换,指定参数类型和个数,例如:
signals:void sendMsg(int n);void sendMsg(QString str);connect(this, static_cast<void (MainWindow::*)(const int)>(&MainWindow::sendMsg), this, [=](int n){qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "n :" << n;});connect(this, static_cast<void (MainWindow::*)(const QString)>(&MainWindow::sendMsg), this, [=](QString str){qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "str :" << str;});
示例
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = nullptr);~MainWindow();signals:void sendMsg(int n);void sendMsg(QString str);private:Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);connect(this, static_cast<void (MainWindow::*)(const int)>(&MainWindow::sendMsg), this, [=](int n){qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "n :" << n;});connect(this, static_cast<void (MainWindow::*)(const QString)>(&MainWindow::sendMsg), this, [=](QString str){qDebug().noquote() << "[" << __FILE__ << __LINE__ << "]" << "str :" << str;});emit sendMsg(1);emit sendMsg("helloworld");
}MainWindow::~MainWindow()
{delete ui;
}
main.cpp
#include "mainwindow.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}
结果
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"qt 重载信号,使用““方式进行connect()调用解决方案":http://eshow365.cn/6-39144-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Pandas数据操作_Python数据分析与可视化
- 下一篇: 定时获取公网ip并发送邮件提醒