2016-08-21 9 views
0

Я пытаюсь создать новый диалог с некоторыми текстовыми полями ввода. Эти текстовые области при нажатии кнопки (в качестве подтверждения) должны быть вставлены в пользовательский вектор класса (через существующие методы).Передача пользовательского класса для подключения (сигналы и слот)

Мое сомнение в том, как я могу подобрать функцию соединения, чтобы передать пользовательский класс в качестве ссылки? Я очень новичок в этом, пожалуйста, простите мою немоту. Это (часть) моего кода.

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

Заранее спасибо

+4

Вы используете старый синтаксис сигнала/слота. Используйте [новый синтаксис, введенный в Qt5] (https://wiki.qt.io/New_Signal_Slot_Syntax), и проблема здесь должна стать ясной. – MrEricSir

+0

@MrEricSir из-за некоторых ограничений проекта. Мне нужно использовать Qt creator 4 и компилятор старой версии minGW 4.8.3, я не знаю, поддерживается ли новый синтаксис. – Mastarius

ответ

3

Вы не можете передавать значения SIGNAL() или SLOT() макросы. Вы должны передать подпись . Кроме того, сигнал и слот должны быть совместимы. Другими словами, подписи должны совпадать. Дополнительную информацию см. В разделе documentation.

Сказав это, вы не можете подключить сигнал кнопки clicked() к слоту, который требует каких-либо аргументов. Простым решением является сохранение clienti в качестве переменной-члена и использование переменной-члена в pulsanteInserisci().

0

подключения должно быть:

подключения (ui-> Введите Ваше, СИГНАЛ (щелкнул (clienti &)), это, SLOT (pulsanteInserisci (clienti &)));

или

подключения (ui-> Введите Ваше, SIGNAL (нажал()), это, SLOT (pulsanteInserisci()));

+0

Но используя этот способ, как я могу установить, что перейти к функции pulsanteInserisci() при нажатии? – Mastarius

+0

Аргументы должны быть совместимы при установлении соединения между сигналом и слотом. У сигнала может быть больше аргументов, чем у слота, но не наоборот. – jpnurmi

+0

, так что это должно быть: connect (ui-> inserisci, SIGNAL (clicked (clienti &)), это, SLOT (pulsanteInserisci (clienti &))); или: connect (ui-> inserisci, SIGNAL (clicked()), это, SLOT (pulsanteInserisci())); – Artmetic