对不起,菜鸟问题。我浏览了文档并创建了自己的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
派生的,那么它已经具有了它,以及setter和getter函数。
因此,解决此问题需要进行一些重写。具体来说,无需在FileListModel
中使用您自己的这些函数版本,也无需创建fileNames
-QStringListModel
正是为了节省您自己编写这些函数的麻烦。但是回到第一个问题-如果必须强制转换,请执行以下操作:
qobject_cast<QStringListModel*>(oldFilesModel)->setStringList(newList);
关于c++ - 向我的QStringListModel的私有(private)QStringList分配一个新的QStringList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24408295/