gpt4 book ai didi

c++ - 将新的 QStringList 分配给我的 QStringListModel 的私有(private) QStringList

转载 作者:行者123 更新时间:2023-11-28 00:27:13 26 4
gpt4 key购买 nike

抱歉这个菜鸟问题。我浏览了文档并创建了我自己的 QStringListModel。我需要做的是将 QStringList 的所有条目分配为我的模型的条目(因此将我的模型的私有(private)成员设置为新的 QStringList)。

我几乎完全按照文档创建了模型,因此我不会在此处列出。我声明我在 hpp 文件中使用的模型,如下所示:

QAbstractItemModel *oldFilesModel;

即使我是这样在 cpp 中创建它的:

oldFilesModel = new FileListModel(emptyStringList);

现在,我在派生类(FileListModel——派生自 QStringListModel)中添加了一个新的公共(public)函数,如下所示:

在 hpp 中:

void setStringList(QStringList newList);

在 cpp 中:

void FileListModel::setStringList(QStringList newList)
{
this->removeRows(0,this->rowCount());
fileNames = newList;
}

这应该将我的名为 fileNames 的私有(private) QStringList 设置为等于 QStringList newList 正确吗? (不确定这是否是正确的方法,所以任何其他建议将不胜感激)。

我的问题是我无法在我的 cpp 文件中调用此函数,因为我的模型是 QAbstractItemModel 类型。如果我的对象被定义为基类的一种类型,我如何从我的子类访问这个函数?

最佳答案

不清楚为什么首先要将 oldFilesModel 声明为 QAbstractItemModel——为什么不将其声明为 QStringListModel?这将至少立即消除问题的一个方面。

但更大的问题是您似乎将自己的 QStringList 数据成员添加到 FileListModel——但如果它是从 QStringListModel 派生的, 然后它已经有了这个,连同 settergetter功能。

因此,解决这个问题需要进行一些重写。具体来说,您不需要在 FileListModelfileNames 中使用您自己的这些函数版本 -- QStringListModel 正是为节省您的麻烦而创建的自己写这些。但是回到第一个问题——如果你必须转换,那么这样做:

qobject_cast<QStringListModel*>(oldFilesModel)->setStringList(newList);

关于c++ - 将新的 QStringList 分配给我的 QStringListModel 的私有(private) QStringList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24408295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com