Qt将表格中的对象发送到主窗口

时间:2014-04-28 23:11:40

标签: c++ qt

我有一个作业,我不太确定如何处理它,此刻我有2个窗口。 - > MainWindow和PlayerForm。

从菜单中,我调用PlayerFrom并使用此表单创建一个对象播放器。 我的问题是如何将此对象发送回主窗口中的标签?

玩家老虎机:

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

        }

表格OK Slot:

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);

1 个答案:

答案 0 :(得分:0)

编辑:FormulaireJoueur应该从QDialog继承,因为它是一个对话框 再次编辑:closeEvent忘记了

在您的FormulaireJoueur课程中添加Joueur,并为其添加公共getter 我假设您直接使用Joueur类型并且复制构造函数是正确的

Joueur FormulaireJoueur::getJoueur()
{
  return this->_joueur;
}
在你的MainWindow.h中添加一个插槽

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对话框的closeEvent

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

整合您的验证和生成Joueur