在我的应用程序中,我有两个视图,一个是显示程序集树的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);
应该怎么做?
答案 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);
}
}
感谢您的建议,它有所帮助。