【发布时间】:2013-11-06 15:58:12
【问题描述】:
我有一个简单的对象库,用于存储有关变量的附加数据。当我创建每个对象(用作变量)时,我想维护这些对象的 QList。有没有办法自动将所有新创建的对象的信号连接到一个插槽。该插槽属于我的应用程序中的一个对象。
对象头 ezbool.h
class EZBool : public QObject
{
Q_OBJECT
public:
explicit EZBool(QObject *parent = 0);
EZBool(QString boolName, bool initialValue, IOTYPE type);
//Removed Member Functions
signals:
void localEZBool_Created(EZBool *me);
private:
QString name;
bool value;
IOTYPE ioType;
};
对象构造器 ezbool.cpp
EZBool::EZBool(QString boolName, bool initialValue, IOTYPE type)
{
name = boolName;
value = initialValue;
ioType = type;
emit localEZBool_Created(this);
}
插槽实现 fbtest.cpp
void TestFB::on_localEZBool_Created(EZBool *newVar)
{
qDebug() << "Auto Connect worked??";
//Handle new variable by adding to QList
}
在fbtest.cpp中以下列方式创建对象:
void TestFB::initialize()
{
mpOnCmd = new EZBool("MpOnCmd", false, IO_INPUT);
zeroSpeed = new EZBool("ZeroSpeed", false, IO_INPUT);
}
我尝试过匹配 Qt 的自动连接功能,但没有成功。自动连接能力引用自以下:
我不想在实例化每个新对象后手动连接每个信号。方式如下:
connect(ezBool, SIGNAL(localEZBool_Created(EZBool*)),
this, SLOT(on_localEZBool_Created(EZBool*)));
有没有人有任何建议或建议?谢谢!
【问题讨论】:
-
我实际上无法解决问题。如果您需要在列表中存储新对象,为什么不在创建后立即将它们添加到列表中并希望使用信号/插槽呢?
-
我希望这发生在幕后,因为它是自动处理的。我当然理解你的建议。此应用程序旨在创建“基本模板”。用户修改越简单越好 - 在这种情况下,必须进行显式调用以将新对象添加到列表中并不简单。
标签: qt signals-slots qt-signals