如何将字符串作为要插入QStringListModel的参数

时间:2017-08-30 15:57:48

标签: c++ qt qstringlistmodel

我正在学习QT,并尝试使用以后填充QStringList

的几个元素填充QListView

我从纪录片中首次尝试:

// Create model
model = new QStringListModel(this);

// Make data
List << "Java" << "C++" << "C";
// Populate our model
model->setStringList(List);
// Glue model and view together
ui->listView->setModel(model);

到目前为止一直都很好......我可以看到我的列表中包含我填充的所有元素......

现在在同一个类中我正在尝试现在定义一个允许我向列表添加新元素的函数...

所以我的第一个想法是定义像

这样的东西
void MainWindow::addNewLanguage(QString& item)
{
    List << item;
    model->setStringList(List);
}

但是(这是我的问题......)我只能通过

调用我的函数
QString x( "Php" );
w1.addNewLanguage( x );

我想改为更喜欢更好的东西:

w1.addNewLanguage( "Pascal" );

无需定义QString的新对象......

但这样做会破坏msg的编译

  

C:\ Users \ xxx \ WorspaceQT \ untitled4 \ main.cpp:25:错误:无效   初始化类型&#39; QString&amp;&#39;的非const引用从一个   类型&#39; QString&#39;的左值        w1.addNewLanguage(&#34; x2&#34;);                           ^

我能做些什么来解决这个问题?

谢谢! :)

1 个答案:

答案 0 :(得分:1)

错误消息已经为您提供了很好的提示:

  

类型&#39; QString&amp;&#39;的非常量引用的无效初始化来自类型&#39; QString&#39;

的右值

因此,您应将addNewLanguage定义为:

void MainWindow::addNewLanguage(const QString& item)

或者:

void MainWindow::addNewLanguage(QString item)

查看this post,了解为什么不允许对非临时对象使用非const引用。

请注意,第二种方法并不比第一种方法慢QString is implicitly shared