传递自定义 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()
中的成员变量。
我正在尝试创建一个包含一些文本输入字段的新对话框。单击按钮(作为确认)后,这些文本区域必须插入自定义 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()
中的成员变量。