将 QPointer 存储到 QVariant 中

Posted

技术标签:

【中文标题】将 QPointer 存储到 QVariant 中【英文标题】:Store QPointer into a QVariant 【发布时间】:2019-06-26 15:04:22 【问题描述】:

我可以在QVariant 中存储QPointer,例如QPointer<QTcpSocket>,然后再从中提取吗?

我试过了:

    QObject *ob = new QObject();
    QPointer<QObject> qp(ob);
    QVariant qv(qp);

但我遇到了一个错误 - QVariant::QVariant(void*)' is private

【问题讨论】:

【参考方案1】:

经过更多研究,可以使用QVariant::fromValue()QVariant::value()

示例代码:

    QTcpSocket *ob = new QTcpSocket();
    qDebug("%p", ob);
    QPointer<QTcpSocket> qp(ob);
    QVariant qv = QVariant::fromValue(qp);
    qp = qv.value<QPointer<QTcpSocket> >();
    qDebug("%p", qp.data());
    delete ob;
    qDebug("%p", qp.data());

这给出了:

0x137c070
0x137c070
0x0

【讨论】:

以上是关于将 QPointer 存储到 QVariant 中的主要内容,如果未能解决你的问题,请参考以下文章

QFlags 和 QVariant

QVariant 中的自定义类型转换为空字符串

QVariant实质

QVariant 调用存储对象的函数,定义在项目的主要部分

QVariant保存指针数据

指向 QHash 的 QPointer