我的应用程序包含以下几个功能:
void SomeClass::set_data_provider(DataProvider *data_provider)
{
connect(data_provider, SIGNAL(data_available(int)),
this, SLOT(data_available(int)));
}
为了避免传递原始指针,我将所有出现的都更改DataProvider *
为QSharedPointer<DataProvider>
。后者几乎是前者的直接替代品,只是您无法将QSharedPointer传递给QObject::connect
。我通过从QSharedPointer中提取原始指针来解决此问题:
void SomeClass::set_data_provider(QSharedPointer<DataProvider> data_provider)
{
connect(data_provider.data(), SIGNAL(data_available(int)),
this, SLOT(data_available(int)));
}
这似乎工作正常,但看起来不太优雅,我对访问像这样的原始指针持谨慎态度。是否有更好的方法连接到QSharedPointer中传递的对象?
您可以创建一个自定义连接函数:
template<class T> bool
my_connect(const QSharedPointer<T> &sender,
const char *signal,
const QObject *receiver,
const char *method,
Qt::ConnectionType type = Qt::AutoConnection)
{
return QObject::connect(sender.data(), signal, receiver, method, type);
}
并像这样使用它:
QSharedPointer<MyObject> shared(new MyObject);
my_connect(shared, SIGNAL(my_signal()), this, SLOT(my_slot()));
唯一的问题是,在您自己的解决方案和我的解决方案中,您都将失去本机连接功能的Qt Creator自动完成功能。
PS对于我来说,我不会更改您的代码。我认为很好:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句