我已经将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();
}
答案 0 :(得分:2)
这很可能是因为该文件没有使用调试信息进行编译,因此调试器将无法在那里中断。尝试将您的应用程序链接到libQtGui的调试版* .so / .dylib / .dll
答案 1 :(得分:1)
我发现了问题。我需要做的就是将函数定义放在.cpp文件中。