传递自定义类来连接(信号和插槽)

Passing custom class to connect (signals and slot)

本文关键字:信号 插槽 连接 自定义      更新时间:2023-10-16

我正在尝试创建一个新的对话框与一些文本输入字段。在单击按钮(作为确认)时,必须将这些文本区域插入到自定义类向量中(通过现有方法)。

我的疑问是,我怎么能适合连接函数传递自定义类作为引用?在这方面我是新手,请原谅我的笨手笨脚。这是我代码的一部分。

#include "aggiungi.h"
#include "ui_aggiungi.h"

aggiungi::aggiungi(clienti& c, QWidget *parent) :
    QDialog(parent),
    ui(new Ui::aggiungi)
{
ui->setupUi(this);
connect(ui->inserisci,SIGNAL(clicked()),this,SLOT(pulsanteInserisci(c)));
}
aggiungi::~aggiungi()
{
  delete ui;
}
void aggiungi::pulsanteInserisci(clienti& c) {
string nome = ui->textNome->toPlainText().toStdString();
unsigned int cc = ui->textCod->toPlainText().toUInt();
string piva = ui->textPIva->toPlainText().toStdString();
cliente* nc = new cliente(nome,cc,piva);
c.aggiungi(*nc);
}

我想要的是能够传递"clienti"对象,以便在单击按钮时执行命令。这个解决方案(显然)不工作,但我怎么能纠正它?你有什么建议?

我还将粘贴我从应用程序输出中得到的错误:

QObject::connect: No such slot aggiungi::pulsanteInserisci(c) 
in..Progetto2016gitdatabaseaggiungi.cpp:9
QObject::connect:  (sender name:   'inserisci')
QObject::connect:  (receiver name: 'aggiungi')

Thanks in advance

不能向SIGNAL()SLOT()宏传递值。必须通过签名。此外,信号和插槽必须兼容。换句话说,签名必须匹配。详细信息请参见文档

话虽如此,你无法将按钮的clicked()信号连接到需要任何参数的插槽。一个简单的解决方案是将clienti存储为成员变量,并在pulsanteInserisci()中使用该成员变量。

connect应为:

连接(ui -> inserisci,信号(点击(clienti&)),槽(pulsanteInserisci (clienti&))),

连接(ui -> inserisci,信号(点击()),槽(pulsanteInserisci ())),