传递自定义 class 以连接(信号和插槽)

Passing custom class to connect (signals and slot)

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

我的疑问是,我怎样才能使连接函数适合传递自定义 class 作为参考?我是这方面的新手,请原谅我的愚蠢。 这是我的(部分)代码。

#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..\Progetto2016\git\database\aggiungi.cpp:9
QObject::connect:  (sender name:   'inserisci')
QObject::connect:  (receiver name: 'aggiungi')

提前致谢

连接应该是:

connect(ui->inserisci,SIGNAL(clicked(clienti&)),this,SLOT(pulsanteInserisci(clienti&)));

connect(ui->inserisci,SIGNAL(clicked()),this,SLOT(pulsanteInserisci()));

您不能将值传递给 SIGNAL()SLOT() 宏。您必须通过签名。此外,信号和槽必须兼容。换句话说,签名必须匹配。有关详细信息,请参阅 documentation

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