2010-06-01 2 views
1

J'ai sous-classé QComboBox pour le personnaliser pour des besoins spéciaux. La sous-classe est utilisée pour promouvoir QComboBoxes dans un fichier ui à partir de QtDesigner. Tout fonctionne sauf que lorsque je mets un point de rupture dans un slot, le programme ne s'arrête pas au point d'arrêt. Je sais cependant qu'il est appelé du résultat qu'il génère. J'ai vérifié d'autres emplacements dans mon programme et ils fonctionnent bien avec les points d'arrêt. Faire un nettoyage et reconstruire tout ne l'a pas réparé. Qu'est-ce qui pourrait causer cela et y a-t-il quelque chose que je puisse faire à ce sujet? L'emplacement en question est le seul de la sous-classe et s'appelle "do_indexChanged()". Vous pouvez trouver l'emplacement sur la ligne 37 de l'en-tête de classe ci-dessous et la connexion signal-emplacement sur la ligne 10 du fichier source de classe.
CLASSE HEADER:point d'arrêt à l'intérieur de la sous-classe QComboBox ne fonctionne pas

#ifndef WVQCOMBOBOX_H 
#define WVQCOMBOBOX_H 

#include <QWidget> 
#include <QObject> 
#include <QComboBox> 
#include <QVariant> 



class wvQComboBox : public QComboBox 
{ 
Q_OBJECT 
//Q_PROPERTY(bool writeEnable READ writeEnable WRITE setWriteEnable) 
public: 
    explicit wvQComboBox(QWidget *parent = 0); 
    bool writeEnable() { 
     return this->property("writeEnable").toBool(); 
    } 
    void setWriteEnable(const bool & writeEnable){ 
     this->setProperty("writeEnable",writeEnable); 
    } 

    bool newValReady() { 
     return this->property("newValReady").toBool(); 
    } 
    void setNewValReady(const bool & newValReady){ 
     this->setProperty("newValReady",newValReady); 
    } 
    QString getNewVal(); 
    int getNewValIndex(); 



    int oldVal; //comboBox Index before user edit began 
private slots: 
    void do_indexChanged(){ 
     this->setWriteEnable(true); 
     if(oldVal!=currentIndex()){ 
      this->setNewValReady(true); 
      oldVal=currentIndex(); 
     } 
    } 

protected: 
    void focusInEvent (QFocusEvent * event); 
    //void focusOutEvent (QFocusEvent * event);//dont need because of currentIndexChanged(int) 
}; 

#endif // WVQCOMBOBOX_H 


#include "wvqcombobox.h" 

wvQComboBox::wvQComboBox(QWidget *parent) : 
    QComboBox(parent) 
{ 
    this->setWriteEnable(true); 
    this->setNewValReady(false); 
    oldVal=this->currentIndex(); 

    connect(this,SIGNAL(currentIndexChanged(int)),this,SLOT(do_indexChanged())); 
} 

void wvQComboBox::focusInEvent (QFocusEvent * event) { 
    this->setWriteEnable(false); 
    oldVal=this->currentIndex(); 
} 


QString wvQComboBox::getNewVal(){ 
    setNewValReady(false); 
    return this->currentText(); 
} 

int wvQComboBox::getNewValIndex(){ 
    setNewValReady(false); 
    return this->currentIndex(); 
} 

Répondre

1

J'ai trouvé le problème. Tout ce que je devais faire était de mettre la définition de la fonction dans le fichier .cpp.

2

Ceci est probablement dû au fait que ce fichier n'a pas été compilled avec les informations de débogage, donc le débogueur ne sera pas en mesure de briser là. Essayez de lier votre application à une version de débogage de libQtGui * .so/.dylib/.dll

+0

Vous pouvez également spécifier des versions de débogage à l'aide de qmake et du fichier de projet. Jetez un oeil voir dans la documentation de qmake pour des exemples. – TerryP

+0

Je suis déjà en mode débogage. Quoi qu'il en soit, les points d'arrêt n'importe où ailleurs dans le travail en classe. –

+0

Le fait est que, TOUS les fichiers doivent être compilés avec les informations de débogage. La définition du mode de débogage pour votre projet signifie que les fichiers de votre projet sont compilés avec les informations de débogage, mais cela ne garantit pas nécessairement que les bibliothèques liées par votre projet ont également été construites avec les informations de débogage. – Gianni

Questions connexes