c++ - 如何将字符串作为参数插入到 QStringListModel 中

标签 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 );

我想代替 dom 一些更好的东西,比如:

w1.addNewLanguage( "Pascal" );

不需要定义一个新的QString对象...

但是这样做会破坏与 msg 的编译

C:\Users\xxx\WorspaceQT\untitled4\main.cpp:25: error: invalid initialization of non-const reference of type 'QString&' from an rvalue of type 'QString' w1.addNewLanguage( "x2" ); ^

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

谢谢! :)

最佳答案

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

invalid initialization of non-const reference of type 'QString&' from an rvalue of type 'QString'

因此,您应该将 addNewLanguage 定义为:

void MainWindow::addNewLanguage(const QString& item)

或者:

void MainWindow::addNewLanguage(QString item)

看看this post解释为什么不允许对临时对象进行非常量引用。

请注意,第二种方法并不比第一种方法慢(很多),因为 QString is implicitly shared .

关于c++ - 如何将字符串作为参数插入到 QStringListModel 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45964949/

相关文章:

C++11 线程可连接但 join() 引发异常

python - pylint 错误在 python3.2 中运行正常,但在 python3.3 中失败

c++ - QStringListModel *作为信号的参数,给我错误 “…attempting to reference deleted function”吗?

c++ - 如何使用 QStringListModel 在 QListView 中添加图标?

python - pyqt中GUI的模型 View 实现错误

c++ - 您是否允许将 char* 重新分配给字符串文字?

c++ - 什么是 OSX 等同于 Linux g++-multilib 的?

c++ - 如何让 lambda 成为类(class)的 friend ?

c++ - 在 C++ 中从父文件夹的父文件夹提供文件位置

c++ - 通过引用传递值到线程并修改