Переопределение keyPressEvent в подклассе QTextEdit - PullRequest
4 голосов
/ 22 марта 2012

У меня есть следующий пример в Qt, в котором я пытаюсь переопределить keyPressEvent подкласса QTextEdit, но дает мне «множественное определение 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();
}

Я попытался объявить QTextEdit в txt.h и включить его только в cpp, но это дает мне некоторые другие ошибки (вероятно, потому что мне нужен класс в заголовке, так как я делюсь на подклассыэто?)

В любом случае, что я делаю не так?

РЕДАКТИРОВАТЬ: Я также попробовал это с другим классом (QLabel), и теперь я получаю ту же ошибку ...

1 Ответ

6 голосов
/ 22 марта 2012

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

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

protected:
    virtual void keyPressEvent(QKeyEvent *e);

public slots:

};
...