我的应用程序包含几个这样的函数:
void SomeClass::set_data_provider(DataProvider *data_provider)
{
connect(data_provider, SIGNAL(data_available(int)),
this, SLOT(data_available(int)));
}
Run Code Online (Sandbox Code Playgroud)
为了避免传递原始指针,我已将所有出现的更改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)));
}
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但它看起来不优雅,我担心像这样访问原始指针.有没有更好的方法连接到在QSharedPointer中传递的对象?