Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. French
  4. Probleme d'execution de QObject::connect()
QtWS25 Last Chance

Probleme d'execution de QObject::connect()

Scheduled Pinned Locked Moved Unsolved French
2 Posts 2 Posters 629 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Offline
    M Offline
    mandoye
    wrote on 18 May 2019, 22:29 last edited by
    #1

    salut. j'ai un probleme quand j'execute ma fenetre de dialogue. les deux Qlineedit de la fenetre principale recupere en meme temps la valeur du widget dialogue. Moi je veux le qlineedit dans lequel j'ai double clique reçoit seul la valeur envoyée.
    Merci de votre aide.
    Mon code:
    namespace Ui {
    class Dialog;
    }

    class Dialog : public QDialog
    {
    Q_OBJECT

    public:
    explicit Dialog(QWidget *parent = nullptr);
    void ajouterRegion();
    //QString varText =""; //texte à récupèrer
    ~Dialog();

    signals:
    void envoyerText(const QString &texte);

    private slots:

    void on_m_btnbox_accepted();
    

    private:
    Ui::Dialog *ui;

    };
    #endif // DIALOG_H

    #ifndef FORMPRINCIPAL_H
    #define FORMPRINCIPAL_H

    #include <QWidget>
    #include <QEvent>
    #include <QString>
    #include <QEvent>
    #include <QMouseEvent>
    #include "dialog.h"

    namespace Ui {
    class FormPrincipal;
    }

    class FormPrincipal : public QWidget
    {
    Q_OBJECT

    public:
    explicit FormPrincipal(QWidget *parent = nullptr);

    ~FormPrincipal();
    

    protected:
    bool eventFilter(QObject *obj, QEvent *event);
    signals:
    void doubleClick();

    private slots:
    void on_m_btnfermer_clicked();
    void ouvrirFenDialog() const;

    private:
    Ui::FormPrincipal *ui;
    Dialog *m_dialog;
    };

    #endif // FORMPRINCIPAL_H
    #include "formprincipal.h"
    #include "ui_formprincipal.h"

    FormPrincipal::FormPrincipal(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::FormPrincipal)
    {
    ui->setupUi(this);
    ui->m_prenoms->installEventFilter(this);
    ui->m_nom->installEventFilter(this);

    m_dialog = new Dialog;
    QObject::connect(this, SIGNAL(doubleClick()),this,SLOT(ouvrirFenDialog()));
    QObject::connect(m_dialog, SIGNAL(envoyerText(const QString &)),
                     ui->m_prenoms, SLOT(setText(const QString &)));
    
    QObject::connect(m_dialog, SIGNAL(envoyerText(const QString &)),
                     ui->m_nom, SLOT(setText(const QString &)));
    

    }

    FormPrincipal::~FormPrincipal()
    {
    delete ui;
    }

    void FormPrincipal::on_m_btnfermer_clicked()
    {
    qApp->quit();
    }

    void FormPrincipal::ouvrirFenDialog() const {

    m_dialog->exec();
    

    }

    /**

    • @brief FenPrincipale::eventFilter
    • @param obj
    • @param ev
    • @return
    • Cette fonction permet de recupèrer l'évènement "Double-click" sur un QWidget de notre fenêtre.
    • On vérifie d'abord que le type d'OBJET est un QWidget et l'évènement un double-click et on laisse
    • l'evenement continué sur le QWidget concerné.
    • NB:Il faut dans ta fenêtre Executer un filtre qui identifie le double-click sur les QWidgets concernés
      */

    bool FormPrincipal::eventFilter(QObject *obj, QEvent *ev){

    //Vérifier que l'évènement est un double-click
    if (ev->type()==QEvent::MouseButtonDblClick){
    
          //On émet un signal qui permettra d'executer le SLOT "ouvrirFenDialog"
          emit doubleClick();
          //On laisse la transmission du SIGNAL continué en retournant "False"
          return false;
    }
    else {
        //On continue le traitement des autres évènements
        return  QObject::eventFilter(obj,ev);
    }
    

    }

    #include "dialog.h"
    #include "ui_dialog.h"

    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
    {
    ui->setupUi(this);
    this->setCursor(Qt::PointingHandCursor);
    this->setWindowModality(Qt::ApplicationModal);
    this->setWindowIcon(QIcon(QCoreApplication::applicationDirPath()+ "/ok.png"));

    //Charger la liste des régions
    this->ajouterRegion();
    
    QObject::connect(ui->m_btnbox,SIGNAL(rejected()),this,SLOT(reject()));
    

    }

    Dialog::~Dialog()
    {
    delete ui;

    }
    void Dialog::ajouterRegion(){
    ui->m_listChoix->addItem("Dakar");
    ui->m_listChoix->addItem("Diourbel");
    ui->m_listChoix->addItem("Fatick");
    ui->m_listChoix->addItem("Kaolack");
    ui->m_listChoix->addItem("Kédougou");
    ui->m_listChoix->addItem("Kolda");
    ui->m_listChoix->addItem("Louga");
    ui->m_listChoix->addItem("Matam");
    ui->m_listChoix->addItem("Saint-Louis");
    ui->m_listChoix->addItem("Sédhiou");
    ui->m_listChoix->addItem("Tambacouda");
    ui->m_listChoix->addItem("Thiès");
    ui->m_listChoix->addItem("Ziguinchor");
    }

    void Dialog::on_m_btnbox_accepted()
    {
    //Envoi du signal par la Fenêtre Dialog
    emit envoyerText(ui->m_listChoix->currentText());
    QDialog::accept();
    }

    1 Reply Last reply
    0
    • C Offline
      C Offline
      cromag
      wrote on 1 Oct 2019, 02:45 last edited by
      #2

      Il serait plus simple de faire une classe dérivée de QLineEdit et de faire un override de la méthode mouseDoubleClickEvent.

      // lineedit.h
      #ifndef LINEEDIT_H
      #define LINEEDIT_H

      #include <QLineEdit>

      class LineEdit : public QLineEdit
      {
      Q_OBJECT
      public:
      explicit LineEdit(QWidget *parent = nullptr);

      protected:
      void mouseDoubleClickEvent(QMouseEvent* event) override;
      };

      #endif // LINEEDIT_H

      // lineedit.cpp
      #include "lineedit.h"
      #include <QInputDialog>

      LineEdit::LineEdit(QWidget *parent)
      : QLineEdit(parent)
      { }

      void LineEdit::mouseDoubleClickEvent(QMouseEvent*)
      {
      QString valeur = QInputDialog::getText(this, "Entrez une valeur:", "Valeur");
      setText(valeur);
      }

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved