точка останова внутри подкласса QComboBox не работает - PullRequest
1 голос
/ 02 июня 2010

У меня есть подкласс QComboBox, чтобы настроить его для особых нужд. Подкласс используется для продвижения QComboBoxes в файле пользовательского интерфейса из QtDesigner. Все работает за исключением того, что когда я ставлю точку останова в слоте, программа не останавливается на точке останова. Однако я знаю, что он вызывается из результата, который он генерирует. Я проверил другие слоты в моей программе, и они отлично работают с точками останова. Делать чистку и перестраивать все не исправляло. Что может быть причиной этого и могу ли я что-то с этим сделать? Данный слот является единственным в подклассе и называется "do_indexChanged ()". Вы можете найти слот в строке 37 заголовка класса ниже и соединение сигнального слота в строке 10 исходного файла класса.
ЗАГОЛОВОК КЛАССА:

#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 ]

2 голосов
/ 02 июня 2010

Скорее всего, это связано с тем, что этот файл не был скомпилирован с отладочной информацией, поэтому отладчик не сможет там сломаться. Попробуйте связать ваше приложение с отладочной версией libQtGui * .so / .dylib / .dll

1 голос
/ 03 июня 2010

Я нашел проблему. Все, что мне нужно было сделать, это поместить определение функции в файл .cpp.

...