2014-04-28 37 views
0

我有一個任務,我不太確定如何處理它,此刻我有2個窗口。 - > MainWindow和PlayerForm。Qt從窗體發送對象到主窗口

從菜單中,我調用PlayerFrom並使用此表單創建一個對象播放器。 我的問題是如何發回這個對象到我的主窗口中的標籤?

播放器插槽:

 void MainWindow::on_actionJoueur_triggered() 
     { 
      FormulaireJoueur *fj = new FormulaireJoueur; 
      fj->show(); 

     } 

形式確定插槽:

void FormulaireJoueur::on_OkJoueur_clicked() 
{ 
    try 
    { 
     std::string Nom = (ui->J_Nom->text()).toStdString(); 
     std::string Prenom = (ui->J_Prenom->text()).toStdString(); 
     std::string Telephone = (ui->J_Phone->text()).toStdString(); 
     std::string Position = (ui->J_Pos->text()).toStdString(); 
     QDate Date = ui->J_Date->date(); 

     int jour = Date.day(); 
     int mois = Date.month(); 
     int annee = Date.year(); 

     util::Date DateJoueur(jour,mois,annee); 

     Joueur NouveauJoueur(Nom,Prenom,DateJoueur,Telephone,Position); 
     std::string Message = NouveauJoueur.reqPersonneFormate(); 
    } 

    catch(ContratException e) 
    { 
     QMessageBox::information(this,"Erreur","Erreur lors de la création du joueur."); 
    } 

} 

FormulaireJoueur.h:

#ifndef FORMULAIREJOUEUR_H 
#define FORMULAIREJOUEUR_H 

#include <QMainWindow> 

namespace Ui { 
class FormulaireJoueur; 
} 

class FormulaireJoueur : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    explicit FormulaireJoueur(QWidget *parent = 0); 
    ~FormulaireJoueur(); 

private slots: 
    void on_OkJoueur_clicked(); 

    void on_AnnulerJoueur_clicked(); 

private: 
    Ui::FormulaireJoueur *ui; 
}; 

#endif // FORMULAIREJOUEUR_H 

集裝箱:

Annuaire AnnuairePrincipal("Canadiens"); 
AnnuairePrincipal.AjouterPersonne(NouveauJoueur); 
+0

的possbile重複HTTP ://stackoverflow.com/questions/5920527/qt-c-accessing-mainwindow-ui-from-a-different-class?rq = 1 – ioseph

+0

你需要什麼物品? Joueur或std :: string – Boo

+0

Joueur對不起,字符串是一個早期的測試 – SKTLZ

回答

0

編輯:FormulaireJoueur應該從QDialog的繼承,因爲它是一個對話框 再次編輯:的closeEvent遺忘

添加Joueur你FormulaireJoueur類,以及一個公共的getter添加到它 我假設你使用直接的Joueur類型和拷貝構造函數是在你的MainWindow.h正確

Joueur FormulaireJoueur::getJoueur() 
{ 
    return this->_joueur; 
} 

一個插槽添加

void FomulaireJoueurFinished(int return) 

然後在您的播放器插槽:

void MainWindow::on_actionJoueur_triggered() 
    { 
     FormulaireJoueur *fj = new FormulaireJoueur; 
     connect(fj, SIGNAL(finished (int)), this, SLOT(FomulaireJoueurFinished(int return)); 
     fj->show(); 

    } 

然後在MainWindow.cpp

void MainWindow::FomulaireJoueurFinished(int return) 
{ 
    if (return == QDialog::Accepted) 
    this->AnnuairePrincipal.AjouterPersonne((static_cast<FormulaireJoueur *>(sender))->getJoueur()); 
} 

你也應該覆蓋FormulaireJoueur對話框

void QDialog::closeEvent (QCloseEvent * e) [virtual protected] 

的到的closeEvent您Joueur的驗證和生成集成

+0

似乎不起作用將我的變量發送到我的主窗口更容易嗎? – SKTLZ

+0

你也可以在你的插槽是FormulaireJoueur * fj = new FormulaireJoueur(this); 並在您的FormulaireJoueur類中添加一個MainWindow * _parent,然後在您的ctor中使用 使用_parent(父) 並且您可以調用公共成員 – Boo

+0

他不確定如何添加MainWindow * _parent – SKTLZ