Qt将对象从窗体发送到主窗口

Qt sending Object from a form to mainwindow

本文关键字:窗口 窗体 对象 Qt      更新时间:2023-10-16

我有一个任务,我不太确定如何处理它,目前我有2个窗口。->MainWindow和PlayerForm。

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

玩家插槽:

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

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

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

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

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

在您的主窗口.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 的验证和生成