0

我正在学习 QT 并试图QStringList用几个元素填充 a,这些元素后来填充 aQListView

我从文档中的第一次尝试是:

// 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 的新对象...

但这样做会破坏与味精的编译

C:\Users\xxx\WorspaceQT\untitled4\main.cpp:25:错误:从“QString”类型的右值 w1.addNewLanguage(“x2”) 的“QString&”类型的非常量引用的初始化无效;^

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

谢谢!:)

4

1 回答 1

1

错误信息已经给了你一个很好的提示:

从“QString”类型的右值初始化“QString&”类型的非常量引用无效

因此,您应该定义addNewLanguage为:

void MainWindow::addNewLanguage(const QString& item)

或者:

void MainWindow::addNewLanguage(QString item)

查看这篇文章,了解为什么不允许对临时对象进行非常量引用。

请注意,第二种方法并不比第一种方法慢(很多),因为QString它是隐式共享的。

于 2017-08-30T16:02:58.363 回答