QT QML目录导航列表视图

【功能】
/目录、文件
/文件过滤
/递归
/事件
/高亮当前行
/当前选项
/目录切换动画
/限制根目录
【下载】:http://download.csdn.net/detail/surfsky/8311503
【核心代码】
import QtQuick 2.0
import Qt.labs.folderlistmodel 2.1 /**
QML目录导航列表
/目录文件
/文件过滤
/递归
/事件
/高亮当前行
/当前选项
/目录切换动画
/限制根目录 usage:
FolderListView{
onItemClicked:{
console.debug(JSON.stringify(item));
}
} author:
surfsky.cnblogs.com
2014-11
*/
ListView {
id: lv
width: 300
height: 600 //-----------------------------------------
// public
//-----------------------------------------
property int rowHeight: 30 // 行高
property int fontSize: 20 // 字体大小
property color hightlightColor: "#d0d0d0" // 高亮行背景色
property var fileFilter : ["*.qml"] // 文件过滤器
property string initFolder: './' // 初始目录
property string rootFolder : '../' // 限制根目录,不可再往上查找 // 点击事件(包括文件和目录)
signal itemClicked(var item); //-----------------------------------------
// 模型
//-----------------------------------------
model: folderModel
FolderListModel {
id: folderModel
nameFilters: lv.fileFilter
folder: lv.initFolder
showDirsFirst: true
showDotAndDotDot: true
} //-----------------------------------------
// 场景切换动画
//-----------------------------------------
PropertyAnimation on x{id: aniForward; from: lv.width; to: 0}
PropertyAnimation on x{id: aniBack; from: -lv.width; to: 0} //-----------------------------------------
// 高亮行
//-----------------------------------------
highlightFollowsCurrentItem: false
highlight: Rectangle {
width: lv.width;
height: lv.rowHeight
color: hightlightColor
y: lv.currentItem.y;
Behavior on y { PropertyAnimation { properties: 'y'; duration: 300; easing.type: Easing.OutExpo } }
//Behavior on y { SpringAnimation { spring: 2; damping: 0.1; duration:100 } }
} //-----------------------------------------
// 代理
//-----------------------------------------
delegate: Item{
width: parent.width
height: lv.rowHeight
Text {
text: fileName
anchors.verticalCenter: parent.verticalCenter
anchors.leftMargin: 10
font.pixelSize: lv.fontSize
x: 5
}
Text {
text: ">";
visible:fileIsDir;
anchors.verticalCenter: parent.verticalCenter
anchors.right: parent.right;
anchors.rightMargin: 10
font.pixelSize: lv.fontSize
}
Rectangle{
width: parent.width
height:1
color: '#f0f0f0'
y: parent.height - 1
x: 0
} MouseArea{
anchors.fill: parent
onClicked: {
parent.ListView.view.currentIndex = index // 触发节点点击事件
var json = {
isDir: fileIsDir,
name: fileName,
path: filePath,
url: fileURL.toString(),
baseName: fileBaseName,
suffix: fileSuffix,
size: fileSize,
modified: fileModified,
accessed: fileAccessed,
folderUrl: getFolder(fileURL.toString())
};
console.debug(JSON.stringify(json));
lv.itemClicked(json); // 目录处理
if (fileIsDir){
// 限制根目录
if (lv.rootFolder != ''){
var folderURL = (fileURL + '/').toLowerCase();
var rootFolderURL = Qt.resolvedUrl(lv.rootFolder).toLowerCase();
if (rootFolderURL.indexOf(folderURL) != -1){
console.log('limit root: ' + rootFolderURL);
return;
}
}
changeFolder(json.name, json.url);
}
} // 获取文件所在的目录
function getFolder(filePath)
{
var n = filePath.lastIndexOf('/');
var folder = filePath.substr(0, n+1);
return folder;
} // 更改目录(修改model并启动相应的动画)
function changeFolder(folderName, folderURL){
//folderModel.showDotAndDotDot = folderURL!=rootFolderURL; // (无效)
folderModel.folder = folderURL;
if (folderName == '..') aniBack.start();
else if (folderName == '.') ;
else aniForward.start();
}
}
} }
QT QML目录导航列表视图的更多相关文章
- Qt qml listview 列表视图控件(下拉刷新、上拉分页、滚动轴)
Qt qml listview下拉刷新和上拉分页主要根据contentY来判断.但要加上顶部下拉指示器.滚动条,并封装成可简单调用的组件,着实花了我不少精力:) [先看效果] [功能] 下拉刷新 ...
- Qt 学习之路 :视图代理
与 Qt model/view 架构类似,在自定义用户界面中,代理扮演着重要的角色.模型中的每一个数据项都要通过一个代理向用户展示,事实上,用户看到的可视部分就是代理. 每一个代理都可以访问一系列属性 ...
- qml基础学习 模型视图(一)
一.理解qml模型和视图 qt的发展是迅速的,虽然在每一个release版本中或多或少都有bug,但是作为一个庞大的gui库,no,应该说是一个开发框架开说,qt已经算是做的相当好.qml部分是qt4 ...
- 跟我学ASP.NET MVC之六:SportsStrore添加产品目录导航
摘要: 上一篇文章,我建立了SportsStore应用程序的核心架构.现在我将使用这个架构向这个应用程序添加功能,你将开始看到这个基础架构的作用.我将添加重要的面向客户的简单功能,在这个过程中,你将看 ...
- 列表视图QlistView
列表视图QlistView要配合setModel模型一起使用 例子一 QStringListModel() 字符串列表模型 import sys from PyQt5.QtWidgets impor ...
- JavaScript自动生成博文目录导航
转载于:JavaScript自动生成博文目录导航 我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到 具体的内容 ...
- Sharepoint 2013列表视图和字段权限扩展插件(免费下载)!
记得2014年春节期间,有博客园的网友通过QQ向我咨询Sharepoint 2013列表视图和字段权限扩展,因为之前他看到我博客介绍Sharepoint 2010列表视图和字段的权限控制扩展使用,问有 ...
- Android——列表视图(ListView)
列表视图是android中最常用的一种视图组件,它以垂直列表的形式列出需要显示的列表项.在android中有两种方法向屏幕中添加列表视图:一种是直接使用ListView组件创建:另外一种是让Activ ...
- Qt 学习之路:视图选择 (QItemSelectionModel)
选择是视图中常用的一个操作.在列表.树或者表格中,通过鼠标点击可以选中某一项,被选中项会变成高亮或者反色.在 Qt 中,选择也是使用了一种模型.在 model/view 架构中,这种选择模型提供了一种 ...
随机推荐
- JavaScript模拟鼠标右键菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【资料下载区】【iCore3相关代码、资料下载地址】更新日期2017/1/5
[iCore3 ARM代码下载地址][全部]DEMO1.0测试程序发布例程一:ARM驱动三色LED例程二:读取arm按键状态例程三:EXTI中断输入实验——读取ARM按键状态例程四:USART通信实验 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- OpenGL函数思考-glLoadIdentity
函数原型: void glLoadIdentity(void) 函数说明: OpenGL为我们提供了一个非常简单的恢复初始坐标系的手段,那就是调用glLoadIdentity()命令.该命令是一个无参 ...
- Windows 下TortoiseGit 设置避免每次登录帐号密码
TortoiseGit ->Settings 1.选择设置的git目录 2.输入登录帐号与email 3.点击Edit global.gitconfig 编辑,将文本 [credential] ...
- MXNET安装过程中遇到libinfo导入不了的问题解决
今天尝试安装windows版本的MXNET,在按照官网的运行了python的setup之后,import mxnet时出现如下错误:cannot import name libinfo,在网上查找发现 ...
- Android Studio踩坑记
1. 模拟器在管理器中可以运行,但是点击run时死活找不到: 在sdk的/platform-tools/目录下找到adb.exe工具 打开cmd,输入下面两条命令 adb kill- ...
- 零基础学WEB前端-CSS
CSS指层叠样式表(Cascading Style Sheets),CSS 是标准的布局语言,用来控制元素的尺寸.颜色.排版.CSS 由 W3C 发明,用来取代基于表格的布局.框架以及其他非标准的表现 ...
- 三、oracle数据库成功安装步骤 Oracle数据源配置
安装完Oracle驱动后,如需连接远程Oracle数据库,还需进行数据源配置,类似Windows下的ODBC数据源配置. 运行"开始菜单\Oracle - OraDb11g_home1\ ...
- lucence.net+盘古分词
第一步: 添加盘古和lucence的dll引用 第二步: 拷贝Dict文件夹到项目 demo里面是Dictionaries 不过官方建议改成Dict 然后把所有项右击属性 改为“如果较新则复制” 第 ...