2016-10-27 3 views
0

別のクラスで宣言されているlineEditの信号とスロットを作るにはどうすればよいですか? LineEditはPeakdetechtionクラスで宣言されています。私はpeaksettingformで信号とスロットを作りたいのですが、どうすればいいですか?異なるクラスのlineEditの接続文を書く方法

答えて

0

にQLineEditが外部からアクセスできるように持っているのいずれか(パブリックまたは取得)またははあなたが興味のある信号を転送する必要があります。

アクセス可能バージョン(不完全と非常に汚い)

class Peakdetechtion { // horrible name 
public: 
    QLineEdit* getLineEdit() { return m_lineEdit; } // don't do it 

private: 
    QLineEdit* m_lineEdit; 
}; 

class Peaksettingform : public QObject { //horrible name 
    Q_OBJECT 
public: 
    Peaksettingform(Peakdetechtion *p, QObject *parent = 0) 
    : QObject(parent) { 
    // you can do this from outside and replace 'this' with a pointer to a Peaksettingform object 
    connect(p->getLineEdit(), SIGNAL(textChanged(const QString &)), this, SLOT(handleText(const QString &))); 
} 

public slots: 
    void handleText(const QString &); 
}; 

信号転送

class Peakdetechtion : public QObject { // horrible name 
Q_OBJECT 
public: 
    Peakdetechtion() { 
    m_lineEdit = new QLineEdit(); // should have a parent but i am lazy 
    connect(m_lineEdit, SIGNAL(textChanged(const QString&)), this, SIGNAL(leTextChanged(const QString&))); 
    } 

signals: 
    void leTextChanged(const QString &); 

private: 
    QLineEdit* m_lineEdit; 
}; 

class Peaksettingform : public QObject { //horrible name 
    Q_OBJECT 
public: 
    Peaksettingform(Peakdetechtion *p, QObject *parent = 0) 
    : QObject(parent) { 
    // you can do this from outside and replace 'this' with a pointer to a Peaksettingform object 
    connect(p, SIGNAL(leTextChanged(const QString &)), this, SLOT(handleText(const QString &))); 
} 

public slots: 
    void handleText(const QString &); 
}; 
+0

アクセシブルなバージョンではありません。 。 。なぜあなたは理解できますか? @Lifeisabug –

+0

@ GiridhariLal - "ウォークリングではない"とはどういう意味ですか?問題の症状を説明してください。 –

+0

私が提供したコードは、明らかにコンパイルできません。それは単にあなたがその問題にどのようにアプローチできるかのデモンストレーションでした。外部からアクセスできる必要があるメニュアをライン編集に直接接続するか、必要な信号と外部の転送信号に転送する必要があります。 – Lifeisabug

関連する問題