2012-09-16 43 views
1

我想要繼承QEditLine,以便我可以定義一個新的SIGNAL發送一個對象標識符。目前,我將一個父信號連接到新類中的一個插槽,並從該插槽發出一個具有附加對象標識符的適當的新信號。 我不明白一件事。問題是我不知道如何定義一個新的信號功能本身。我不知道我應該放在那裏。我的意思是我知道它的論點,但我不知道它會作爲一個函數做什麼。我這是第一次這樣做,它看起來很傻,但我真的呆在那裏>。 <。 任何人都可以提供一些線索。這可能是一個非常簡單的問題。QEditLine的子類與一個新的信號

感謝

// myqeditline.h 
#ifndef MYQEDITLINE_H 
#define MYQEDITLINE_H 
#include <QWidget> 
#include <QLineEdit> 
#include <QString> 
class MyQEditLine : public QLineEdit 
{ 
    Q_OBJECT 
public: 
    explicit MyQEditLine(const QString& n, QWidget *parent = 0); 
protected: 
    QString name; 
signals: 
    void textChanged(QString textCHanged, QString sender); 
protected slots: 
public slots: 
    void myTextChanged(QString textChanged); 
}; 
#endif // MYQEDITLINE_H 

// myqeditline.cpp 
#include "myqeditline.h" 
MyQEditLine::MyQEditLine(const QString &n, QWidget *parent) 
    : QLineEdit(parent),name(n) { 
    connect(this,SIGNAL(textChanged(QString)),this,SLOT(myTextChanged(QString))); 
} 
void MyQEditLine::myTextChanged(QString textChanged) { 
    emit textChanged(QString textChanged, QString name); 
} 
+0

你能解釋一下你的意思通過「自己定義一個新的信號功能」?你嘗試'發射textChanged(textChanged,名稱);' –

+0

嗨。通過定義,我的意思是提供一個實現,{和}之間的一個函數體,就像我對SLOT和構造函數所做的一樣。 SIGNAL是否需要在myqeditline.cpp中實現? – Celdor

+0

我想我已經明白了。 「信號是由moc自動生成的,不能在.cpp文件中實現,它們永遠不會有返回類型(即使用void)。」 http://doc.qt.nokia.com/4.7-snapshot/signalsandslots.html – Celdor

回答

1

我剛剛意識到,回答我的問題是關於這個Qt Project網站,在關於「信號」一節,在第4段。它說:「信號由商務部自動生成的,不得在.cpp文件中實現他們絕不能有返回類型(即使用無效。」