2012-03-21 109 views
4

我在Qt中嘗試覆蓋QTextEdit的子類的keyPressEvent,但給了我一個「多重定義的txt :: keyPressEvent(QKeyEvent *)」,我可以'牛逼找出原因:覆蓋QTextEdit子類中的keyPressEvent

//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只有在CPP#包括,但是這給了我一些其他錯誤(可能是因爲我需要的類在頭,因爲我「米繼承嗎?)

反正我在做什麼錯?

編輯:我也嘗試過將其與另一個類(QLabel),現在我得到了同樣的錯誤......

回答

6

的問題是,你宣佈它作爲一個信號。這應該工作發現:

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

protected: 
    virtual void keyPressEvent(QKeyEvent *e); 

public slots: 

}; 
+0

我不能相信這是那麼容易......非常感謝您的幫助! C++編譯器錯誤可能非常隱蔽:( – 2012-03-21 22:39:03