QML - 小例子 - 文件目录浏览器

QML写动画比较方便,参考QML提供的例子写了如下在Android上可用的文件目录浏览器(电脑端其实也可用,只是还不完整)

以上这两张截图是在电脑上直接运行时的样子,在Android手机上运行的话,会有一些小差异。

FileListView.xml的代码大概如下:

import QtQuick 2.3
import Qt.labs.folderlistmodel 2.1
import QtQuick.Controls.Styles 1.2
import QtQuick.Controls 1.2

Rectangle {
    id:root;
    state:"hidden";
    color: "#212126";

    property string folderPathName: "file:///H:/TTPmusic/";
    property bool rootPath:false;
    signal message(string msg);
    property int lineHeight: 90;
    signal selectedFolder(string folderPath);

    LineStyle{
        id:topLine;
        text: "...";
        width: root.width;
        height: root.lineHeight;
        fontSize:40;
        selectable:false;
        source: "res/image/arrow-1-backward.png";
        onClicked: {
            console.log("topLine  onClicked");
            if (folderModel.parentFolder != ""){
                root.folderPathName = folderModel.parentFolder;
                //text = root.folderPathName.slice(8);
            }
            else{
                //Fns.set_path_result(0);
                root.state = "hidden";
            }

            console.log("topLine root.folderPathName:", root.folderPathName);
            console.log("\n       folderModel.folder:", folderModel.folder,
                        "\n folderModel.parentFolder:", folderModel.parentFolder,
                        "\n   folderModel.rootFolder:", folderModel.rootFolder);
        }
    }

    ListView{
        id:listFileView;
        anchors{
            bottom: rectangleButton.top;
            bottomMargin: 4;
            right: root.right;
            rightMargin: 0;
            left: root.left;
            leftMargin: 0;
            top: topLine.bottom;
            topMargin: 0;
        }
        clip:true;

        delegate:LineStyle{
            text: fileName;
            height:root.lineHeight;
            width:root.width;
            fontSize:35;
            source: folderModel.get(index, "fileIsDir")?"res/image/folder.png":"";
            selectable:folderModel.get(index, "fileIsDir")?false:true;
            isdir: folderModel.get(index, "fileIsDir")?true:false;
            onClicked: {
                console.log("\nlistFileView  onClicked F:", folderModel.folder,
                            "\n folderModel.parentFolder:", folderModel.parentFolder,
                            "\n   folderModel.rootFolder:", folderModel.rootFolder,
                            "\n     folderModel.isFolder:", folderModel.isFolder(index));
                console.log("\n      fileName:",  folderModel.get(index, "fileName"),
                            "\n      filePath:",  folderModel.get(index, "filePath"),
                            "\n       fileURL:",  folderModel.get(index, "fileURL"),
                            "\n  fileBaseName:",  folderModel.get(index, "fileBaseName"),
                            "\n    fileSuffix:",  folderModel.get(index, "fileSuffix"),
                            "\n      fileSize:",  folderModel.get(index, "fileSize"),
                            "\n  fileModified:",  folderModel.get(index, "fileModified"),
                            "\n  fileAccessed:",  folderModel.get(index, "fileAccessed"),
                            "\n     fileIsDir:",  folderModel.get(index, "fileIsDir"));
                if(folderModel.isFolder(index)){
                    root.folderPathName = folderModel.get(index, "fileURL");
                }
            }
            onSelectfile: {
                //add_song_to_list!
                console.log("onSelectfile: ", folderModel.get(index, "fileURL"));
            }
        }
        model: FolderListModel{
            id:folderModel;
            objectName: "folderModel";
            showDirs: true;
            showFiles: true;
            showDirsFirst: true;
            nameFilters: ["*.mp3", "*.flac"];
            folder:root.folderPathName;
            onFolderChanged: {
                console.log("onFolderChanged root.folderPathName:", root.folderPathName);
                console.log("\n               folderModel.folder:", folderModel.folder,
                            "\n         folderModel.parentFolder:", folderModel.parentFolder,
                            "\n           folderModel.rootFolder:", folderModel.rootFolder);
            }
        }
    }

    Rectangle {
        id: rectangleButton;
        height: lineHeight;
        color: "#212126";
        anchors{
            left: root.left;
            leftMargin: 0;
            right: root.right;
            rightMargin: 0;
            bottom: root.bottom;
            bottomMargin: 0;
        }

        Rectangle{
            id:rectWhiteLine;
            anchors{
                left:parent.left;
                right: parent.right;
                top:parent.top;
            }
            height: 2;
            color:"white";
        }
    }
}

留此备忘。

时间: 2024-10-25 01:02:21

QML - 小例子 - 文件目录浏览器的相关文章

QML小例子【信号与槽】

1.效果 代码参考B站视频:https://www.bilibili.com/video/av36584062 功能:点击左边,会发出信号,右边会有个颜色动画,然后计数+1 2.分析: 一共有两个对象,他们很多属性都差不多,如可变颜色.原型.可变text..所以可以声明一个Circle对象,然后Sender和Recver都继承它: 能够通过Sender控制Recver,那么Sender一定有信号发出,然后Recver有一个函数用于状态改变: 应该在发出信号的地方即Sender里,连接信号与槽,根

cmake 之一个小例子

cmake,比手写makefile更好的选择 安装cmake,此部分略过 一.新建一个工程 这里我是在windows下使用eclipse新建了一个c工程(PS:我一般新建一个Makefile类型的工程,这样比较干净) 二.建立必要的文件夹 我的工程目录: D:\code\cpp\cmakestudy\test>tree /f 卷 软件 的文件夹 PATH 列表 卷序列号为 0006-17B7 D:. │ .cproject │ .project │ CMakeLists.txt │ ├─bin

node.js安装及小例子

1.node.js安装:http://www.nodejs.org/download/ 下载msi版本,直接双击安装,默认在c盘programfiles下,可以进行配置. 2.在某路径下建立test.js文件(本人在D:\nod目录下): 代码: 1 var http = require('http'); 2 http.createServer(function (req, res) { 3 res.writeHead(200, {'Content-Type': 'text/plain'});

ASP.NET Cookie对象到底是毛啊?(简单小例子)

记得刚接触asp.net的时候,就被几个概念搞的头痛不已,比如Request,Response,Session和Cookie.然后还各种在搜索引擎搜,各种问同事的,但是结果就是自己还是很懵的节奏. 那cookie到底是毛啊?下面是我最不喜欢的一种解释方式(官方定义吧应该叫,我这种智商根本读不懂嘛~) Cookie对象也称缓存对象,该对象用于保存客户端浏览器请求的服务器页面,也可用它存放非敏感性的用户信息. 以前根本读不懂啊,现在其实也懵懵的. 还是用例子能把这个概念搞明白 1.做一个用户登录的界

小例子:通用模块——文本框默认提示信息

小例子:通用模块——文本框默认提示信息 因为H5的属性 不兼容所有浏览器 <input type="search" name="" placeholder="提示信息" /> 所以有下面写法: <!DOCTYPE html> <html> <head> <title></title> <meta charset="utf-8"> <met

JS模拟键盘事件 -- 原理及小例子

小例子: (Chrome下可用,其他浏览器未测试,使用新方法,暂不考虑兼容性) 代码如下: 1 <input type="button" tabindex="-1" value="点点点点点" id="btn"> 2 <input type="text" placeholder="1"> 3 <input type="text" plac

SpringMVC+Spring+Hibernate的小例子

Strusts2+Spring+Hibernate虽然是主流的WEB开发框架,但是SpringMVC有越来越多的人使用了,确实也非常好用,用得爽! 这里实现了一个SpringMVC+Spring+Hibernate的小例子.注释都在代码里面. 项目各包的结构如下图: 1, 首先是pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLS

php+jquery+ajax+json简单小例子

直接贴代码: Php代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Content-Type:text/html;charset=utf-8"); ?> <head> <script type="text/javascript" src="http://code.jquery.com/jquery.min.j

css3动画之1--animation小例子

1.首先看效果 2.代码及分析 <style type="text/css"> #div1 { margin:100px; position: absolute; text-align: center; background: #abcdef; width: 300px; height: 20px; line-height: 20px; } @-webkit-keyframes move { 0% { -webkit-transform:translateY(0px) }