2014-04-28 36 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