传递自定义类来连接(信号和插槽)
Posted
技术标签:
【中文标题】传递自定义类来连接(信号和插槽)【英文标题】:Passing custom class to connect (signals and slot) 【发布时间】:2016-08-21 18:26:33 【问题描述】:我正在尝试创建一个带有一些文本输入字段的新对话框。这些文本区域在单击按钮时(作为确认)必须插入到自定义类向量中(通过现有方法)。
我的疑问是,我怎样才能适应连接函数来传递自定义类作为参考?我是这方面的新手,请原谅我的愚蠢。 这是(部分)我的代码。
#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')
提前致谢
【问题讨论】:
您使用的是旧的信号/槽语法。使用the new syntax introduced in Qt5,这里的问题应该就清楚了。 @MrEricSir 由于一些项目限制,我必须使用 Qt creator 4 和旧版本编译器 minGW 4.8.3,我不知道是否已经支持新语法。 【参考方案1】:您不能将值传递给 SIGNAL()
或 SLOT()
宏。您必须通过签名。此外,信号和时隙必须兼容。换句话说,签名必须匹配。有关详细信息,请参阅documentation。
话虽如此,您无法将按钮的clicked()
信号连接到需要任何参数的插槽。一个简单的解决方案是将clienti
存储为成员变量,并使用pulsanteInserisci()
中的成员变量。
【讨论】:
【参考方案2】:连接应该是:
connect(ui->inserisci,SIGNAL(clicked(clienti&)),this,SLOT(pulsanteInserisci(clienti&)));
或
connect(ui->inserisci,SIGNAL(clicked()),this,SLOT(pulsanteInserisci()));
【讨论】:
但是使用这种方式,我如何设置在点击时传递给函数 pulsanteInserisci() 的内容? 在信号和槽之间建立连接时,参数必须兼容。信号可以有比槽更多的参数,但反过来不行。 所以应该是:connect(ui->inserisci,SIGNAL(clicked(clienti&)),this,SLOT(pulsanteInserisci(clienti&)));或:connect(ui->inserisci,SIGNAL(clicked()),this,SLOT(pulsanteInserisci()));以上是关于传递自定义类来连接(信号和插槽)的主要内容,如果未能解决你的问题,请参考以下文章