【发布时间】:2012-09-16 21:24:02
【问题描述】:
我正在尝试继承 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);
}
【问题讨论】:
-
你能解释一下“定义一个新的信号函数本身”是什么意思吗?你试过
emit textChanged(textChanged, name); -
嗨。通过定义,我的意思是提供一个实现,一个在 { 和 } 之间的函数体,就像我对 SLOT 和构造函数所做的那样。 SIGNAL 是否需要在 myqeditline.cpp 中实现?
-
我想我明白了。 “信号由 moc 自动生成,不得在 .cpp 文件中实现。它们永远不能有返回类型(即使用 void)。”。 doc.qt.nokia.com/4.7-snapshot/signalsandslots.html
-
快速提问:为什么要创建 Qt 中已经存在的机制的新实现?您可以使用
setObjectName将名称设置为QObject,并且您可以在接收器插槽中使用sender()方法,该方法将为您提供发送此信号的QObject。
标签: c++ qt qt4 qt-signals