给QStringListModel的私有QStringList赋值一个新的QStringList
Assigning a new QStringList to the private QStringList of my QStringListModel
不好意思,这个问题很幼稚。我浏览了文档并创建了自己的QStringListModel。我需要做的是将QStringList的所有条目分配给我的模型的条目(从而将我的模型的私有成员设置为新的QStringList)。
我几乎完全按照文档创建了模型,所以我不会在这里列出它。我像这样声明我在hpp文件中使用的模型:
QAbstractItemModel *oldFilesModel;
尽管我在cpp中这样创建了它:
oldFilesModel = new FileListModel(emptyStringList);
现在,我已经在我的派生类(FileListModel -它派生自QStringListModel)中添加了一个新的公共函数,如下所示:
在高压泵:
void setStringList(QStringList newList);
在cpp: void FileListModel::setStringList(QStringList newList)
{
this->removeRows(0,this->rowCount());
fileNames = newList;
}
这应该设置我的私人QStringList称为文件名等于QStringList newList正确吗?(不确定这是否是正确的方法,所以任何其他建议将不胜感激)。
我的问题是我不能在我的cpp文件中调用这个函数,因为我的模型是QAbstractItemModel类型。如果我的对象被定义为基类的类型,我如何从子类访问此函数?
首先不清楚为什么要将oldFilesModel
声明为QAbstractItemModel
-为什么不将其声明为QStringListModel
?这至少可以立即消除问题的一个方面。
但更大的问题是,你似乎是添加自己的QStringList
数据成员FileListModel
-但如果它是从QStringListModel
派生的,那么它已经有这个,随着setter和getter函数。
所以要算出来需要稍微重写一下。具体来说,在FileListModel
或fileNames
中不需要您自己版本的这些函数——创建QStringListModel
正是为了省去您自己编写这些函数的麻烦。但回到第一个问题——如果你必须强制转换,那么这样做:
qobject_cast<QStringListModel*>(oldFilesModel)->setStringList(newList);
我认为你的方法中至少有一个缺陷:你在自定义类中隐藏了基类的函数QStringListModel::setStringList(const QStringList &)
。如果基类中的函数声明为虚函数,这是可以的,但它不是。你要做的,就是有另一个函数,比如setMyStringList
,它会调用基类函数。例如:
void FileListModel::setMyStringList(QStringList newList)
{
removeRows(0, this->rowCount());
setStringList(newList); // Calls the base class function.
}
我看不出有什么理由让fileNames
留在你的课上。您总是可以使用QStringListModel::stringList()
函数获得字符串列表。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '