gpt4 book ai didi

c++ - 将信号和槽附加到 QSharedPointer 中的对象

转载 作者:可可西里 更新时间:2023-11-01 17:57:40 26 4
gpt4 key购买 nike

我的应用程序包含几个这样的函数:

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 对 native 连接功能的自动完成功能。

附言至于我,我不会更改您的代码。我觉得还行:)

关于c++ - 将信号和槽附加到 QSharedPointer 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28441710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com