• 15736阅读
  • 21回复

QTreeWidget如何改变选中焦点 [复制链接]

上一主题 下一主题
离线梦魇缘
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-15
QTreeWidget如何改变选中焦点,例如QTreeWidget当前有三项QTreeWidgetItem,当删除第三项后,第二项能被自动选中?谢谢
离线sbtree
只看该作者 1楼 发表于: 2011-03-15
setCurrentIndex(index)
windows 7 + VC++2008 + Qt4.5.2
离线梦魇缘
只看该作者 2楼 发表于: 2011-03-15
你好,谢谢sbtree 朋友,是用void QAbstractItemView::setCurrentIndex ( const QModelIndex & index ) [slot]这个函数吗,怎么用的,可不可以解释详细一下,我是刚学QT的,有些不是太明白,非常感谢!
离线wxj120bw

只看该作者 3楼 发表于: 2011-03-15
qtdemo有相应的例子 你可以参考
离线feiyangbaxia

只看该作者 4楼 发表于: 2012-04-24
回 楼主(梦魇缘) 的帖子
我也遇到了这个问题,请问楼主解决了吗?
离线淳于半邪

只看该作者 5楼 发表于: 2012-04-24
先得到删除项item的Index 而后setCurrentItem(itemAt()) ;
离线feiyangbaxia

只看该作者 6楼 发表于: 2012-04-24
回 5楼(淳于半邪) 的帖子
这样写以后,怎么提示'itemAt' was not declared in this scope
离线淳于半邪

只看该作者 7楼 发表于: 2012-04-24
回 6楼(feiyangbaxia) 的帖子
你得到删除的那项的哪些信息?是Item?还是index
离线feiyangbaxia

只看该作者 8楼 发表于: 2012-04-24
回 7楼(淳于半邪) 的帖子
得到的是index。把我的代码贴上来吧
void MainWindow::on_pushButton_3_clicked()
{
    int index;
    if(ui->treeWidget_3->currentItem()==NULL)return;  
  else
    {
        QTreeWidgetItem *parent=ui->treeWidget_3->currentItem()->parent();
        if(!parent)
        {
            index=ui->treeWidget_3->indexOfTopLevelItem(ui->treeWidget_3->currentItem());
            ui->treeWidget_3->setCurrentItem(itemAt(index));
            delete ui->treeWidget_3->takeTopLevelItem(index);
        }
    }
}
离线淳于半邪

只看该作者 9楼 发表于: 2012-04-24
回 8楼(feiyangbaxia) 的帖子
itemAt函数写错了,而且你这个删除的是树中index这一大项,你把兄弟也给删了
离线feiyangbaxia

只看该作者 10楼 发表于: 2012-04-24
回 9楼(淳于半邪) 的帖子
但是我运行以后,是点一次按钮就删除一个呀,不是全部删除的,只是我当前选中一个item,点删除按钮,可以删除,如果我再点上面那一项就自动选中给删了。我想根据我自己的选择来删
离线淳于半邪

只看该作者 11楼 发表于: 2012-04-24
回 10楼(feiyangbaxia) 的帖子
你这个item是第一层的么(也就是第一列)?
离线feiyangbaxia

只看该作者 12楼 发表于: 2012-04-24
回 9楼(淳于半邪) 的帖子
但是我运行以后,点击一次按钮就只能删除我当前选中的那个呀,只是和楼主情况一下,如果我选中第3个,点删除按钮以后可以删除,但是删除完以后第二个就会被自动选中(不是我自己选中的),再点删除,第二个就被删了
离线feiyangbaxia

只看该作者 13楼 发表于: 2012-04-24
回 11楼(淳于半邪) 的帖子
恩,是的
离线淳于半邪

只看该作者 14楼 发表于: 2012-04-24
回 13楼(feiyangbaxia) 的帖子
第一层的那绝对是没错的,你试试在第一层下添加它的子项(多添加几个),然后删除第二层中的某项,看看结果
离线feiyangbaxia

只看该作者 15楼 发表于: 2012-04-24
回 14楼(淳于半邪) 的帖子
我这个treewidget只有一列,你是说让我再添加一列(第二列),然后选中第二列中的某项,点删除按钮吗?
离线淳于半邪

只看该作者 16楼 发表于: 2012-04-24
如果只有一列,那你那么删除就不会出错;如果不止一列就会出现像我之前说的那种错误
离线feiyangbaxia

只看该作者 17楼 发表于: 2012-04-24
回 16楼(淳于半邪) 的帖子
是只有一列的,就是不知道怎么取消那个自动获得的焦点,像我刚才描述的情况
离线淳于半邪

只看该作者 18楼 发表于: 2012-04-24
回 17楼(feiyangbaxia) 的帖子
QTreeWidget->setSelectionMode(QAbstractItemView::NoSelection) ;不是很好,可以一试
离线feiyangbaxia

只看该作者 19楼 发表于: 2012-04-24
回 18楼(淳于半邪) 的帖子
还是不行,不过非常感谢你呀
离线feiyangbaxia

只看该作者 20楼 发表于: 2012-04-25
回 18楼(淳于半邪) 的帖子
终于解决了,在删除item的代码后面加一句ui->treeWidget->setCurrentItem(NULL,0);就可以了,把当前的item(自动选中的item)设为空
离线淳于半邪

只看该作者 21楼 发表于: 2012-04-26
回 20楼(feiyangbaxia) 的帖子
恩,不错!
快速回复
限100 字节
 
上一个 下一个