覆盖QTextEdit子类中的keyPressEvent

时间:2012-03-21 22:22:51

标签: c++ qt qtextedit qkeyevent

我在Qt中有以下示例,其中我尝试覆盖QTextEdit的子类的keyPressEvent,但是给了我“txt :: keyPressEvent(QKeyEvent *)的多重定义”,我无法弄清楚原因:

//txt.h
#ifndef TXT_H
#define TXT_H

#include <QTextEdit>

class txt : public QTextEdit
{
    Q_OBJECT
public:
    txt(QWidget *parent = 0);

signals:
    void keyPressEvent(QKeyEvent *e);

public slots:

};

#endif // TXT_H


//txt.cpp
#include "txt.h"

txt::txt(QWidget *parent) :
    QTextEdit(parent)
{
}

void txt::keyPressEvent(QKeyEvent *e){
    //do stuff with the key event
}


//main.cpp
#include <QtGui/QApplication>
#include "txt.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    txt w;
    w.show();

    return a.exec();
}

我试着在txt.h中声明QTextEdit并且只在cpp中声明#include它,但是这给了我一些其他的错误(可能是因为我需要头文件中的类,因为我正在对它进行子类化?)

无论如何,我做错了什么?

编辑:我也尝试过另一个类(QLabel),现在我遇到了同样的错误......

1 个答案:

答案 0 :(得分:6)

问题在于您将其声明为信号。这应该找到:

class txt : public QTextEdit
{
    Q_OBJECT
public:
    txt(QWidget *parent = 0);

protected:
    virtual void keyPressEvent(QKeyEvent *e);

public slots:

};