我有一个treeModel。我可以通过以下方式访问。
void SumTreeProject::insertRow()
{
QModelIndex index = treeView->selectionModel()->currentIndex();
QAbstractItemModel *model = treeView->model();
TreeModel *myModel = qobject_cast<TreeModel*>(model);
if (!model->insertRow(index.row() + 1, index.parent()))
return;
Container cont;
QModelIndex child = model->index(index.row() + 1, 0,
index.parent());
model->setData(child, QVariant("Container"), Qt::EditRole);
myModel->SetContainer(child, cont);
QModelIndex indexRoot = treeView->rootIndex();
iterate(indexRoot, model);
}
我想从其他Cpp文件访问同一模型。
我尝试移动所有标题,但它创建了一个新模型,而不是访问已存在的模型。
这是我的构造函数定义。
WavefrontRenderer::WavefrontRenderer(QWidget *parent)
: QMainWindow(parent)
{
setupUi(this);
Container c;
TreeModel *model = new TreeModel("RootElement", c);
treeView->setModel(model);
treeView->setDragEnabled(true);
treeView->setAcceptDrops(true);
}
我试图通过创建WavefrontRenderer类的对象来访问模型,但后来意识到它正在创建新的模型结构,而不是访问已经构建的模型结构。
答案 0 :(得分:1)
创建模型的新实例将创建一个新模型。
共享模型的一种方法是将其传递给另一个类
例如
WavefrontRenderer::WavefrontRenderer(QWidget *parent, TreeModel * poOtherTreeModel )
: QMainWindow(parent)
{
setupUi(this);
Container c;
//TreeModel *model = new TreeModel("RootElement", c);
treeView->setModel(poOtherTreeModel); // TBD: for safety test for nullptr
treeView->setDragEnabled(true);
treeView->setAcceptDrops(true);
}
然后使用SumTreeProject
类中的树模型并将其传递给WavefrontRenderer
承包商