2010-06-01 2 views
1

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

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

ответ

1

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

2

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

+0

Вы также можете указать сборки отладки, используя qmake и файл проекта. Взгляните на примеры документации qmake. – TerryP

+0

Я уже в режиме отладки. Anyways точки останова в другом месте в работе класса. –

+0

Дело в том, КАЖДЫЙ файл должен быть скомпилирован с информацией об отладке. Настройка режима отладки для вашего проекта означает, что файлы вашего проекта скомпилированы с информацией об отладке, но это может не гарантировать, что библиотеки, связанные вашим проектом, также были построены с помощью отладочной информации. – Gianni

Смежные вопросы