2016-08-21 15 views
0

私はいくつかのテキスト入力フィールドを持つ新しいダイアログを作成しようとしています。これらのテキスト領域は、ボタンのクリック(確認)として(既存のメソッドを使用して)カスタムクラスベクトルに挿入する必要があります。カスタムクラスを渡す(シグナルとスロット)

私の疑問は、カスタムクラスを参照として渡すために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') 

おかげ

+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-> inserisciを接続し、 SIGNAL(クリック(clienti &))、これ、SLOT(pulsanteInserisci(clienti &)));

又は

(UI-> inserisci、SIGNAL(クリック())、このスロット(pulsanteInserisci()))接続します。

+0

しかし、この方法で、どのようにクリックすると関数pulsanteInserisci()に渡すべきものを設定できますか? – Mastarius

+0

シグナルとスロットの間に接続を確立するときは、引数は互換性がなければなりません。シグナルは、スロットよりも多くの引数を持つことができますが、逆もありません。 – jpnurmi

+0

である必要がありますので、connect(ui-> inserisci、SIGNAL(clicked(clienti&))、this、SLOT(pulsanteInserisci(clienti &)));または: ()))); – Artmetic

関連する問題