对不起,菜鸟问题。我浏览了文档并创建了自己的QStringListModel。我需要做的是将QStringList的所有条目分配为模型的条目(因此将模型的私有成员设置为等于新的QStringList)。

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

QAbstractItemModel *oldFilesModel;


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

oldFilesModel = new FileListModel(emptyStringList);


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

在hpp中:

void setStringList(QStringList newList);


在cpp中:

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


这应该设置我的私有QStringList称为fileNames等于QStringList newList正确吗? (不确定这样做是否正确,因此将不胜感激任何其他建议)。

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

最佳答案

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

但是更大的问题是,您似乎在QStringList中添加了自己的FileListModel数据成员-但是,如果它是从QStringListModel派生的,那么它已经具有了它,以及settergetter函数。

因此,解决此问题需要进行一些重写。具体来说,无需在FileListModel中使用您自己的这些函数版本,也无需创建fileNames-QStringListModel正是为了节省您自己编写这些函数的麻烦。但是回到第一个问题-如果必须强制转换,请执行以下操作:

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

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

10-11 16:23