文件浏览器主要有三部分组成: 1 返回上级菜单按钮 2地址栏(QLinedit) 3目录显示栏(Qtreeview)
上篇文章调用系统的文件目录到Qtreeview部件中 主要实现了文件浏览器的主体功能 这一篇主要是添加一些小功能来完善文件浏览器 主要包括以下几个功能:
1 在地址栏粘贴地址 按下回车直接跳转到对应目录
2 地址栏添加地址自动补全 用户输入一个字符就会弹出下拉菜单提示输入
3 添加返回按钮的信号槽 实现返回上一级菜单
通过实现这些功能 我们可以了解Qt在GUI编程的强大之处!
功能一: 创建槽函数 slotGetPath() 相应QL'ineEdit的returnPressed()信号
void fileView::slotgetPath() { QString path=LineEditDir->text(); path.replace(QString("\\"),QString("/")); //替换符号 // tree->expand(model->index(path)); //展开对应的文件项 tree->setRootIndex(model->index(path)); }
功能二: 利用到了Qt中的 QCompleter类(见参考文献1)
completer=new QCompleter(model,LineEditDir);//Qt自动补全类 地址补全类 //给地址栏添加补全类并设置显示数目 completer->setMaxVisibleItems(5); LineEditDir->setCompleter(completer);
用了QDir的cdup() 函数 但QDir有个问题是他不能返回到磁盘目录 所以用cdUp()返回的bool值作为参数实现一个if语句
感觉方法用的有点笨 不过基本功能还是都实现了的!
//实现返回上一层菜单 void fileView::slotBtnclicked() { QString path=LineEditDir->text(); path.replace(QString("\\"),QString("/")); //替换符号 QDir dir; dir.setPath(path); dir.cdUp(); //返回父目录 path=dir.absolutePath(); path.replace(QString("/"),QString("\\")); //替换符号 if(dir.cdUp()==true) { tree->setRootIndex(model->index(path)); LineEditDir->setText(path); } else if(dir.cdUp()==false) { tree->setRootIndex(model->index(" ")); LineEditDir->setText(""); } }
参考文献:
【1】 QCompleter