将 '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;
    

parametersQList&lt;StorageConfig&gt;

但是我收到了这个错误:

将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]

            parameters.at(j).value = QVariant(myQLineEdit->text());

                                   ^

我完全理解这个问题:myQLineEdit-&gt;text() 返回一个const,我不能将const 分配给non-const 变量。没关系。

但我的问题是……我不知道如何解决这个问题。 我无法删除text()const 状态,因为它是一个内部Qt 方法。 而且我不想将我的StorageConfig.value 更改为const,因为我希望以后能够修改它。

我只想在我的QString 上删除这个const。但我不知道怎么做。 我尝试过使用std::remove_const 并将text() 存储在临时的QString 中,但它没有用。 所以,我没有想法。

有什么帮助吗?

谢谢。

【问题讨论】:

parameters常量 QList&lt;StorageConfig&gt; 吗?还是对 constant 对象的引用?请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。 猜想:你在一个 const 函数中赋值。 【参考方案1】:

问题是QList::at() 返回const T &amp;。请改用QList::operator[]parameters[j].value = QVariant(myQLineEdit-&gt;text());

【讨论】:

以上是关于将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qt中使用自定义数据类型

将 'const QVariant' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]

QVariant(相当于是Java里面的Object,起到一个数据类型“擦除”的作用,可以使用Q_DECLARE_METATYPE进行注册)

Qt的QVariant类

使用 QVariant 的 Qt 调用方法

Qt Customize QVariant