• 7959阅读
  • 3回复

QTreeView对象怎么改变item的焦点(已解决) [复制链接]

上一主题 下一主题
离线azlbcoo
 

只看楼主 倒序阅读 楼主  发表于: 2009-05-19
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
用QTreeview定义的对象显示系统目录和图片文件,用鼠标和按钮Next,Prev可以切换图片的显示,我的问题是怎么在点击按钮的同时把treeview窗口的焦点改变。我看帮助文档有
void QTreeView::setSelection()这个函数,不过他是纯虚函数,是在不知道怎么用。求各位老大解答,谢谢!
[ 此帖被azlbcoo在2009-05-21 12:10重新编辑 ]
离线azlbcoo

只看该作者 1楼 发表于: 2009-05-19
补充几句,顺便自己顶一下,
dirsTree = new QTreeView(this);
dirsModel = new QDirModel(list, QDir::AllDirs | QDir::NoDotAndDotDot | QDir::Files, QDir::Name);
dirsTree->setModel(dirsModel);
离线hercules

只看该作者 2楼 发表于: 2009-05-19
QItemSelectionModel * sel = treeView->selectionModel ();

sel->select(...);
我的QQ号:337396132
欢迎大家加我为好友,一起学习Qt
离线azlbcoo

只看该作者 3楼 发表于: 2009-05-21
谢谢你的回答,给了我启发,不过我没用这个实现。
void MyTreeview :: nextImage()
{
    QModelIndex currentIndex = dirsTree->currentIndex();
        if (dirsModel->isDir(currentIndex))
        {
        nextFlag = true;                            //标志位,当前index是dir值为true
        dirsTree->setExpanded(currentIndex, 1);
        currentIndex = currentIndex.child(0, 0);
        }
        QModelIndex currentIndexParent = currentIndex.parent();            //当前index的parent索引
        QModelIndex currentFolderStartIndex = currentIndex.model()->index(0, 0, currentIndexParent);    //当前目录第一个图片的index

    qint32 currentFolderTotal = currentIndex.model()->rowCount(currentIndexParent);    //当前目录下文件的个数
        if (currentIndex.row() == (currentFolderTotal - 1))                //判断是不是最后一个,是就跳出该文件夹
        {
        QModelIndex jumpIndexParent = dirsTree->indexBelow(currentIndex);                //获得跳出的索引
        dirsTree->setCurrentIndex(jumpIndexParent);
        }
        else
        {
        if(nextFlag)
        {
            dirsTree->setCurrentIndex(currentIndex);
            nextFlag = false;
        }
        else
        {
            QModelIndex nextIndex = dirsTree->indexBelow(currentIndex);
            dirsTree->setCurrentIndex(nextIndex);
            nextFlag = false;
        }
        }
}

刚开始用QTreeView不熟悉,昨天找到了indexBelow(),indexAbove()这两个函数已经实现了。我做的这个是遇到文件夹就打开它dirsTree->setExpanded(currentIndex, 1),进入这个文件夹,到末尾跳出到下一级,一直一级一级向下走。
快速回复
限100 字节
 
上一个 下一个