2012-03-21 5 views
4

У меня есть следующий пример в Qt, в котором я пытаюсь переопределить keyPressEvent подкласса QTextEdit, но дает мне «множественное определение txt :: keyPressEvent (QKeyEvent *)», и я могу " т понять, почему:Переопределение ключаPressEvent в подклассе QTextEdit

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

Я попытался вперед объявляя QTextEdit в txt.h и #including его только в CPP, но это дает мне некоторые другие ошибки (вероятно, потому, что мне нужен класс в заголовке, так как 'm subclassing it?)

В любом случае, что я делаю неправильно?

EDIT: Я также пробовал с другим классом (QLabel), и теперь я получаю ту же ошибку ...

ответ

6

Проблема заключается в том, что вы объявили его в качестве сигнала. Это должно найти работу:

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

protected: 
    virtual void keyPressEvent(QKeyEvent *e); 

public slots: 

}; 
+0

Я не могу поверить, что все было так просто ... Большое спасибо за помощь! Ошибки компилятора C++ могут быть настолько загадочными :( –