У меня есть подкласс 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();
}
Вы также можете указать сборки отладки, используя qmake и файл проекта. Взгляните на примеры документации qmake. – TerryP
Я уже в режиме отладки. Anyways точки останова в другом месте в работе класса. –
Дело в том, КАЖДЫЙ файл должен быть скомпилирован с информацией об отладке. Настройка режима отладки для вашего проекта означает, что файлы вашего проекта скомпилированы с информацией об отладке, но это может не гарантировать, что библиотеки, связанные вашим проектом, также были построены с помощью отладочной информации. – Gianni