4

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にのみ含めることを試みましたが、他のエラーが発生します(おそらく、ヘッダーにクラスが必要なため、サブクラス化していますか?)

とにかく、私は何が間違っているのですか?

編集:別のクラス(QLabel)でも試してみましたが、同じエラーが発生します...

4

1 に答える 1

6

問題は、それをシグナルとして宣言したことです。これはうまくいくはずです:

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

protected:
    virtual void keyPressEvent(QKeyEvent *e);

public slots:

};
于 2012-03-21T22:33:12.000 に答える