【问题标题】:Qt linking a QTreeView and a QTableViewQt 链接 QTreeView 和 QTableView
【发布时间】:2015-01-16 11:26:49
【问题描述】:

在我的应用程序中,我有两个视图,一个是显示程序集树的 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);

这应该怎么做?

【问题讨论】:

  • 也许尝试使用QItemSelectionModel::select() 函数代替?它将选择/取消选择您视图的项目。
  • @vahancho 我会再看一下 - 我确实尝试过,但我正在努力从整数创建 QModelIndex。 (你能告诉我我是 Qt 的新手吗 :))
  • 您不能从任意整数创建模型索引。只有知道行号和列号才能这样做。在这种情况下,您需要使用 QAbstractItemModel::index() 函数。

标签: qt


【解决方案1】:

好的 - 我知道了:D

如果我使用 QModelIndex 作为参数,setCurrentIndex 确实有效,而不是像我之前那样使用 int。

我在下面的代码中将 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);
    }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多