c – 将信号和插槽附加到QSharedPointer中的对象

前端之家收集整理的这篇文章主要介绍了c – 将信号和插槽附加到QSharedPointer中的对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序包含几个这样的函数
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(),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()),SLOT(my_slot()));

唯一的问题是,在您和我的解决方案中,您将失去本机连接功能的Qt Creator自动完成功能.

附:至于我,我不会改变你的代码.我觉得很好:)

猜你在找的C&C++相关文章