1

オブジェクト識別子を送信する新しいシグナルを定義できるように、QEditLine をサブクラス化しようとしています。現時点では、親シグナルを新しいクラスのスロットに接続し、そのスロットから追加のオブジェクト識別子を使用して適切な新しいシグナルを発信します。一つ理解できません。問題は、新しいシグナル関数自体を定義する方法がわからないことです。そこに何を入れたらいいのかわからない。つまり、その引数は知っていますが、関数として何をすべきかわかりません。私はこれを初めてやっているので、非常にばかげているように見えるかもしれません ;p でも、私は本当にそこに行き詰まりました >.<. 誰か手がかりを教えてください。おそらくとても簡単な問題です。

ありがとう

// 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);
}
4

1 に答える 1

1

私の質問に対する答えは、このQtプロジェクトのWebサイトの4番目の段落の「信号」に関するセクションにあることに気づきました。「シグナルはmocによって自動的に生成されるため、.cppファイルに実装してはなりません。リターンタイプを指定することはできません(つまり、voidを使用してください)。

于 2012-09-17T00:29:55.117 に答える