QComboBox 子类内的断点不起作用

发布于 2024-09-03 19:06:33 字数 2175 浏览 3 评论 0原文

我对 QComboBox 进行了子类化,以根据特殊需求对其进行自定义。该子类用于在 QtDesigner 的 ui 文件中提升 QComboBoxes。一切正常,除了当我在槽中放置断点时,程序不会在断点处停止。但我确实知道它是从它生成的结果中调用的。我检查了程序中的其他插槽,它们在断点下工作得很好。进行清理和重建都没有解决问题。可能是什么原因造成的?我能做些什么吗?所讨论的槽是子类中唯一的槽,称为“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();
}

I have subclassed QComboBox to customize it for special needs. The subclass is used to promote QComboBoxes in a ui file from QtDesigner. Everything works except that when I put a break point in a slot, the program does not stop at the breakpoint. I do however know that it is being called from the result it generates. I checked other slots in my program and they work fine with breakpoints. Doing a clean and rebuild all did not fix it. What could be causing this and is there anything I can do about it? The slot in question is the only one in the subclass and is called "do_indexChanged()". You can find the slot on line 37 of the class header below and the signal-slot connection on line 10 of the class source file.
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();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§普罗旺斯的薰衣草 2024-09-10 19:06:33

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

This is most likely due to the fact that that file was not compilled with debug info, therefore the debugger won't be able to break there. Try linking your app to a debug version of libQtGui*.so/.dylib/.dll

惟欲睡 2024-09-10 19:06:33

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

I found the problem. All I needed to do was to put the function definition in the .cpp file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文