将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]
Posted
技术标签:
【中文标题】将 \'const QVariant\' 作为 \'this\' 参数传递会丢弃限定符 [-fpermissive]【英文标题】:passing 'const QVariant' as 'this' argument discards qualifiers [-fpermissive]将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive] 【发布时间】:2017-06-10 13:06:29 【问题描述】:我有一个这样的struct
:
struct StorageConfig
QString id;
QString description;
QVariant value;
;
我想将QLineEdit
的值分配给我的StorageConfig.value
的值:
for (int j=0; j<parameters.count(); j++)
if (parameters.at(j).id == id)
parameters.at(j).value = QVariant(myQLineEdit->text());
break;
parameters
是QList<StorageConfig>
但是我收到了这个错误:
将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]
parameters.at(j).value = QVariant(myQLineEdit->text()); ^
我完全理解这个问题:myQLineEdit->text()
返回一个const
,我不能将const
分配给non-const
变量。没关系。
但我的问题是……我不知道如何解决这个问题。
我无法删除text()
的const
状态,因为它是一个内部Qt 方法。
而且我不想将我的StorageConfig.value
更改为const
,因为我希望以后能够修改它。
我只想在我的QString
上删除这个const
。但我不知道怎么做。
我尝试过使用std::remove_const
并将text()
存储在临时的QString
中,但它没有用。
所以,我没有想法。
有什么帮助吗?
谢谢。
【问题讨论】:
parameters
是 常量 QList<StorageConfig>
吗?还是对 constant 对象的引用?请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。
猜想:你在一个 const 函数中赋值。
【参考方案1】:
问题是QList::at()
返回const T &
。请改用QList::operator[]
:parameters[j].value = QVariant(myQLineEdit->text());
。
【讨论】:
以上是关于将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]的主要内容,如果未能解决你的问题,请参考以下文章
当 QDataStream 没有这种方法时,为啥可以将 QVariant 写入 QDataStream?