为什么我不能更改 QMap 中的 Qvariant 值?
Why can't I change the Qvariant value inside a QMap?
我正在尝试传递一个名为 QMap<QString, QVariant>* collect_row
的对象,然后我将用 QVariant
值填充 second
元素。 second
元素中的当前值为 0
.
我正在使用此代码连接到数据库,然后将数据库中的行复制到 QMap<QString, QVariant>* collect_row
。
DATABASE_STATUS Database::get_row_from(const QString& table_name, const QString& at_column_name, const QString& where_value_is_equal_to, QMap<QString, QVariant>* collect_row){
/* Check if we are connected */
if(!getInstance()->qSqlDatabase.isOpen())
return DATABASE_STATUS_NOT_CONNECTED;
QSqlQueryModel qSqlQueryModel;
qSqlQueryModel.setQuery("SELECT * FROM " + table_name + " WHERE " + at_column_name + " = '" + where_value_is_equal_to + "'");
QSqlRecord record = qSqlQueryModel.record(0);
QList<QString> column_names = collect_row->keys();
QList<QVariant> values_holders = collect_row->values();
for(int i = 0; i < column_names.length(); i++){
QVariant value_holder = values_holders.at(i);
value_holder.setValue(record.value(record.indexOf(column_names.at(i))));
}
return DATABASE_STATUS_OK;
}
所以我这里有 column_names
,我想将 QVariant
值设置到 values_holders
。
for(int i = 0; i < column_names.length(); i++){
QVariant value_holder = values_holders.at(i);
value_holder.setValue(record.value(record.indexOf(column_names.at(i))));
}
我想改写这段代码,但是我不能写values_holders.at(i).setValue()
,因为那个函数不存在。
for(int i = 0; i < column_names.length(); i++)
values_holders.at(i).setValue(record.value(record.indexOf(column_names.at(i))));
database.cpp:72:30: error: no matching member function for call to 'setValue'
qvariant.h:560:23: note: candidate function template not viable: 'this' argument has type 'const QVariant', but method is not marked const
所以这意味着我无法更改元素,即使有一个名为 .setValue
?
的函数
使用此代码。请注意,我将 QMap
指针更改为引用。我相信代码应该可以工作,但我还没有测试过它。但它仍然非常丑陋且非常不理想。但我试图对您提供的代码进行最小的更改。
DATABASE_STATUS Database::get_row_from(const QString& table_name, const QString& at_column_name, const QString& where_value_is_equal_to, QMap<QString, QVariant>& collect_row)
{
/* Check if we are connected */
if(!getInstance()->qSqlDatabase.isOpen())
return DATABASE_STATUS_NOT_CONNECTED;
QSqlQueryModel qSqlQueryModel;
qSqlQueryModel.setQuery("SELECT * FROM " + table_name + " WHERE " + at_column_name + " = '" + where_value_is_equal_to + "'");
QSqlRecord record = qSqlQueryModel.record(0);
QList<QString> column_names = collect_row.keys();
for(int i = 0; i < column_names.length(); i++){
QString column_name = column_names.at(i);
collect_row[column_name] = record.value(record.indexOf(column_name));
}
return DATABASE_STATUS_OK;
}
我正在尝试传递一个名为 QMap<QString, QVariant>* collect_row
的对象,然后我将用 QVariant
值填充 second
元素。 second
元素中的当前值为 0
.
我正在使用此代码连接到数据库,然后将数据库中的行复制到 QMap<QString, QVariant>* collect_row
。
DATABASE_STATUS Database::get_row_from(const QString& table_name, const QString& at_column_name, const QString& where_value_is_equal_to, QMap<QString, QVariant>* collect_row){
/* Check if we are connected */
if(!getInstance()->qSqlDatabase.isOpen())
return DATABASE_STATUS_NOT_CONNECTED;
QSqlQueryModel qSqlQueryModel;
qSqlQueryModel.setQuery("SELECT * FROM " + table_name + " WHERE " + at_column_name + " = '" + where_value_is_equal_to + "'");
QSqlRecord record = qSqlQueryModel.record(0);
QList<QString> column_names = collect_row->keys();
QList<QVariant> values_holders = collect_row->values();
for(int i = 0; i < column_names.length(); i++){
QVariant value_holder = values_holders.at(i);
value_holder.setValue(record.value(record.indexOf(column_names.at(i))));
}
return DATABASE_STATUS_OK;
}
所以我这里有 column_names
,我想将 QVariant
值设置到 values_holders
。
for(int i = 0; i < column_names.length(); i++){
QVariant value_holder = values_holders.at(i);
value_holder.setValue(record.value(record.indexOf(column_names.at(i))));
}
我想改写这段代码,但是我不能写values_holders.at(i).setValue()
,因为那个函数不存在。
for(int i = 0; i < column_names.length(); i++)
values_holders.at(i).setValue(record.value(record.indexOf(column_names.at(i))));
database.cpp:72:30: error: no matching member function for call to 'setValue'
qvariant.h:560:23: note: candidate function template not viable: 'this' argument has type 'const QVariant', but method is not marked const
所以这意味着我无法更改元素,即使有一个名为 .setValue
?
使用此代码。请注意,我将 QMap
指针更改为引用。我相信代码应该可以工作,但我还没有测试过它。但它仍然非常丑陋且非常不理想。但我试图对您提供的代码进行最小的更改。
DATABASE_STATUS Database::get_row_from(const QString& table_name, const QString& at_column_name, const QString& where_value_is_equal_to, QMap<QString, QVariant>& collect_row)
{
/* Check if we are connected */
if(!getInstance()->qSqlDatabase.isOpen())
return DATABASE_STATUS_NOT_CONNECTED;
QSqlQueryModel qSqlQueryModel;
qSqlQueryModel.setQuery("SELECT * FROM " + table_name + " WHERE " + at_column_name + " = '" + where_value_is_equal_to + "'");
QSqlRecord record = qSqlQueryModel.record(0);
QList<QString> column_names = collect_row.keys();
for(int i = 0; i < column_names.length(); i++){
QString column_name = column_names.at(i);
collect_row[column_name] = record.value(record.indexOf(column_name));
}
return DATABASE_STATUS_OK;
}