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

时间:2016-08-21 18:26:33

标签: c++ qt signals-slots

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

我的疑问是,我如何使用connect函数传递自定义类作为参考?我是非常新手,请原谅我的愚蠢。 这是我的代码(的一部分)。

#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')

提前致谢

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

连接应该是:

连接(UI-> inserisci,SIGNAL(点击(clienti&安培)),对此,SLOT(pulsanteInserisci(clienti&安培;)));

连接(UI-> inserisci,SIGNAL(点击()),对此,SLOT(pulsanteInserisci()));