从另一个cpp文件访问树结构

时间:2019-05-20 14:09:54

标签: qt qt5

我有一个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类的对象来访问模型,但后来意识到它正在创建新的模型结构,而不是访问已经构建的模型结构。

1 个答案:

答案 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承包商