QComboBox子类内的断点不起作用

时间:2010-06-01 23:11:25

标签: c++ qt gdb subclass breakpoints

我已经将QComboBox子类化,以根据特殊需求进行自定义。子类用于在QtDesigner的ui文件中提升QComboBoxes。一切都有效,除了当我在一个插槽中放置一个断点时,程序不会在断点处停止。但我确实知道它是从它生成的结果中调用的。我检查了我的程序中的其他插槽,它们可以正常使用断点。做一个干净和重建所有没有解决它。可能导致这种情况的原因是什么我可以做些什么呢?有问题的插槽是子类中唯一的插槽,称为“do_indexChanged()”。您可以在下面的类标题的第37行找到插槽,在类源文件的第10行找到信号插槽连接     CLASS HEADER:

#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();
}

2 个答案:

答案 0 :(得分:2)

这很可能是因为该文件没有使用调试信息进行编译,因此调试器将无法在那里中断。尝试将您的应用程序链接到libQtGui的调试版* .so / .dylib / .dll

答案 1 :(得分:1)

我发现了问题。我需要做的就是将函数定义放在.cpp文件中。