Model view controller Qt:使用默认模型选择我的数据

Model view controller Qt:使用默认模型选择我的数据,model-view-controller,qt,Model View Controller,Qt,我对Qt非常陌生,我想根据自己的需要使用一个模型: 我有一个需要以不同方式处理的子类实例的动态数量(如果选择了,则每个子类都有不同的UI控件)。我想获得一个列表视图,在那里我可以添加新元素或删除旧元素,以及禁用/启用现有元素 当然,我想重写尽可能少的代码,所以我想利用Listwidget和ListModel为用户提供一些控件。但是如何将这些(或者更好的是项目)链接到类的实例呢 你知道这方面的教程吗? 我已经在QtDemo和谷歌上搜索过了,但我不知道该搜索哪个词 所以我没有什么好结果 基本上,我认

我对Qt非常陌生,我想根据自己的需要使用一个模型: 我有一个需要以不同方式处理的子类实例的动态数量(如果选择了,则每个子类都有不同的UI控件)。我想获得一个列表视图,在那里我可以添加新元素或删除旧元素,以及禁用/启用现有元素

当然,我想重写尽可能少的代码,所以我想利用Listwidget和ListModel为用户提供一些控件。但是如何将这些(或者更好的是项目)链接到类的实例呢

你知道这方面的教程吗? 我已经在QtDemo和谷歌上搜索过了,但我不知道该搜索哪个词 所以我没有什么好结果

基本上,我认为我需要的是一个模型项,它接受
Collider*
作为其数据。
但当我把它插入
QStandardItem.setData()
时,它会说
错误:“QVariant::QVariant(void*)”是私有的

页面是否回答了您的问题?这里有一个导出StringListModel项的示例,您可以将其用作模板,因此我找到了解决此问题的方法。 由于
QStandardItem
s能够将
QVariant
s存储为数据,因此我想在
QVariant
中存储指向我的数据的指针。为了实现这一点,我必须使用
Q\u DECLARE\u元类型(MyType*)
。 有了这个,我能够

MyType *MyInstance = new MyType;
QVariant data;
data.setValue(MyInstance);
QStandardItem *item = new QStandardItem("My Item");
item->setData(data);
standardModel->appendRow(item);
最好的方法是,您可以添加任意数量的类型,然后让
QVariant
来决定它是否包含您想要的类型:

if(v.canConvert<MyType*>())
 //Yes it is MyType
else if( v.canConvert<MyOtherType*>())
    //Oh it is the other one
if(v.canConvert())
//是的,是我的类型
else if(v.canConvert())
//哦,是另一个
最后,这只需要声明元类型,这样就不必对任何项进行子类化

此外,您还应该在此处阅读此限制:


已经有一段时间了,很抱歉你的回答太晚了:这说明了我想要避免的问题。有许多示例,您只需要将指针作为数据分配给一个不需要子类化就应该支持的项。幸运的是,我似乎找到了一个解决方案,我将在这里发布。