Partage
  • Partager sur Facebook
  • Partager sur Twitter

[QT] Problème SLOT

"No such slot ..."

Sujet résolu
    23 avril 2008 à 15:58:52

    Bonjour à tous,

    Mon projet est de réaliser un petit logiciel en ligne de commande. Pour cela, j'aimerai réaliser une console "maison". Cette console est censée retenir les commandes tapées dans un QStringList.

    Mon problème est le suivant :

    J'ai 2 fichiers :

    console.h
    #ifndef DEF_CONSOLE
    #define DEF_CONSOLE
    
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QTextEdit>
    #include <QLineEdit>
    #include <QStringList>
    
    class Console : public QWidget
    {
    	Q_OBJECT
    	
    	public:
    		Console();
    		
    	public slots:
    		void addStringToHistory(QString string);
    	
    	private:
    		QStringList *m_history;
    		QPushButton *m_bouton_erase;	
    		QTextEdit   *m_prompt;
    		QLineEdit   *m_writer;
    	
    		
    };
    
    #endif
    

    et

    console.cpp
    #include "console.h"
    
    Console::Console() : QWidget()
    {
    	setFixedSize(400,435);
    	
    	m_history = new QStringList();
    	
    	m_prompt = new QTextEdit(this);
    		m_prompt->setReadOnly(true);
    		m_prompt->setFixedSize(400,401);	
    	
    	m_writer = new QLineEdit(this);
    		m_writer->setFixedSize(300,25);
    		m_writer->move(0,402);
    	
    	m_bouton_erase = new QPushButton("Erase", this);
    		m_bouton_erase->setFixedSize(98,25);
    		m_bouton_erase->move(301,402);
    		
    	QObject::connect(m_bouton_erase, SIGNAL(clicked()), m_writer, SLOT(clear()));
    	QObject::connect(m_writer, SIGNAL(returnPressed()), this, SLOT(addStringToHistory(m_writer->text())));
            QObject::connect(m_writer, SIGNAL(returnPressed()), m_writer, SLOT(clear()));
    }
    
    void Console::addStringToHistory(QString string)
    {
    	m_history->append(string);
    }
    


    Lors de la compilation, aucune erreur ne survient.

    Mais lors du lancement du programme, j'obtient ceci :

    Citation : compilateur

    Object::connect: No such slot Console::addStringToHistory(m_writer->text())



    j'avoue ne pas comprendre.

    En esperant obtenir une réponse, Merci ;)

    • Partager sur Facebook
    • Partager sur Twitter
      23 avril 2008 à 16:29:27

      Ton problème viens du fait que l'on ne peux pas mettre de VALEUR dans un signal/slot lors d'une "connexion". On ne peux mettre que des TYPE , genre int, bool, MaClasse, ... avec pointeur ou non.

      Dans ton cas, returnPressed() n'as aucun argument, donc addStringToHistory(...) ne devrais pas non plus avoir d'argument.

      pour que cela fonctionne, il aurais fallu faire : (mais je te préviens, c'est invalide dans ta situation)

      QObject::connect(m_writer, SIGNAL(returnPressed(QString)), this, SLOT(addStringToHistory(QString)));
      
      • Partager sur Facebook
      • Partager sur Twitter
      Altarapp.com - Applications, Code Snippets, API Wrappers et etc, le tout en C# le plus clair du temps!
        23 avril 2008 à 16:40:48

        Ok, merci de ton aide.

        Donc normalement ce code lui ne me renverra pas d'erreur :

        console.cpp
        #include "console.h"
        
        Console::Console() : QWidget()
        {
        	setFixedSize(400,435);
        	
        	m_history = new QStringList();
        	
        	m_prompt = new QTextEdit(this);
        		m_prompt->setReadOnly(true);
        		m_prompt->setFixedSize(400,401);	
        	
        	m_writer = new QLineEdit(this);
        		m_writer->setFixedSize(300,25);
        		m_writer->move(0,402);
        	
        	m_bouton_erase = new QPushButton("Erase", this);
        		m_bouton_erase->setFixedSize(98,25);
        		m_bouton_erase->move(301,402);
        		
        	QObject::connect(m_bouton_erase, SIGNAL(clicked()), m_writer, SLOT(clear()));
        	QObject::connect(m_writer, SIGNAL(returnPressed()), this, SLOT(addStringToHistory()));
        	QObject::connect(m_writer, SIGNAL(returnPressed()), m_writer, SLOT(clear()));
        }
        
        void Console::addStringToHistory()
        {
        	m_history->append(m_writer->displayText());
        }
        


        Edit 1 : C'est ok cela fonctionne je finis mes tests et je met le sujet en résolu.

        Edit 2 : Tout fonctionne parfaitement le sujet est donc résolu.

        Merci pour ton aide
        • Partager sur Facebook
        • Partager sur Twitter

        [QT] Problème SLOT

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown