Qt链接QTreeView和QTableView

时间:2015-01-16 11:26:49

标签: qt

在我的应用程序中,我有两个视图,一个是显示程序集树的QTreeView。装配体可以将其他装配体和零件作为子装置。另一个视图是QTableView中的部件列表。

我想要做的是:当在装配树中选择了一个prt(零件没有子节点)时,我希望在零件表视图中突出显示该零件。

这就是我到目前为止......在树视图的点击处理程序中,我得到了ItemModel,然后是部件号。

QAbstractItemModel *model = asmview->model();
QString partno = model-> index(index.row(), 0, index.parent()).data(Qt::DisplayRole).toString();

bool hasch = model->hasChildren(index);

if (hasch){
  qDebug() << "has children" ;
} else {
  qDebug() << "has no children" ;

  // go find the partnumber in the other grid
  int idx;
  idx = partsview->getItemNoForPartNo(partno);

该函数只是遍历部分列表,直到找到正确的部分,然后返回索引,如果找不到则返回-1。

这是我被卡住的地方。我还没有找到一种方法来设置零件表视图的当前索引/选择而没有编译错误。例如,这些不编译:

if (idx >= 0){
  // partsview->setCurrentIndex(idx);
  partsview->selectionModel()->setCurrentIndex(idx);

应该怎么做?

1 个答案:

答案 0 :(得分:0)

好的 - 我已经知道了:D

如果我使用QModelIndex作为参数,而不是像我一样使用int,那么

setCurrentIndex会起作用。

我在下面的代码中将QMoelIndex设为midx。

if (!hasch) {
    // go find the partnumber in the other grid
    int idx = partsview->getItemNoForPartNo(partno);
    QAbstractItemModel *itemmodel = partsview->model();

    if (idx >= 0) {
        QModelIndex midx = itemmodel->index(idx, 0, QModelIndex());
        partsview->setCurrentIndex(midx);
    }
}

感谢您的建议,它有所帮助。