将信号和插槽附加到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(), SIGNAL(data_available(int)),
        this, SLOT(data_available(int)));
}

这似乎工作正常,但看起来不太优雅,我对访问像这样的原始指针持谨慎态度。是否有更好的方法连接到QSharedPointer中传递的对象?

k

您可以创建一个自定义连接函数:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将点击的信号和插槽添加到Qt中的自定义按钮

来自分类Dev

Qt插槽和信号。获取插槽接收器对象

来自分类Dev

QT5中的信号和插槽

来自分类Dev

Qt:连接文本中的信号和插槽

来自分类Dev

在QT中清除信号和插槽的命名

来自分类Dev

如何在c ++中连接qml对象,信号和机制以及插槽?

来自分类Dev

信号和插槽的工作

来自分类Dev

将方法附加到对象与使用Javascript中的函数

来自分类Dev

JS-如何将孩子附加到对象中

来自分类Dev

使用JAXB将编组对象附加到XML文件中

来自分类Dev

将String对象附加到Arduino中的字符数组

来自分类Dev

如何自动将关系中的属性附加到根对象?

来自分类Dev

使用JAXB将编组对象附加到XML文件中

来自分类Dev

将注释附加到PowerPoint 2016中的特定对象

来自分类Dev

无法将多个元素附加到数组对象中

来自分类Dev

将信号和插槽关联到qcheckbox动态创建

来自分类Dev

信号和插槽 qt 关闭插槽

来自分类Dev

如何在Qt中创建动态信号和插槽?

来自分类Dev

Qt 插槽和信号:MainWindow 中没有匹配函数

来自分类Dev

如何实用地将信号连接到ios中的插槽?

来自分类Dev

Qt信号和插槽:权限

来自分类Dev

Qt插槽和信号语法

来自分类Dev

Qt信号和插槽故障

来自分类Dev

插槽和信号无限循环

来自分类Dev

带信号和插槽的QScopedPointer

来自分类Dev

QML - 如何将操作附加到信号处理程序?

来自分类Dev

使用plsql将json对象附加或附加到另一个json对象json对象中

来自分类Dev

将代理附加到现有对象?

来自分类Dev

可以将键值附加到ActiveRecord对象