QML

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: "...";
         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("
       folderModel.folder:", folderModel.folder,
                        "
 folderModel.parentFolder:", folderModel.parentFolder,
                        "
   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;
            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("
listFileView  onClicked F:", folderModel.folder,
                            "
 folderModel.parentFolder:", folderModel.parentFolder,
                            "
   folderModel.rootFolder:", folderModel.rootFolder,
                            "
     folderModel.isFolder:", folderModel.isFolder(index));
                console.log("
      fileName:",  folderModel.get(index, "fileName"),
                            "
      filePath:",  folderModel.get(index, "filePath"),
                            "
       fileURL:",  folderModel.get(index, "fileURL"),
                            "
  fileBaseName:",  folderModel.get(index, "fileBaseName"),
                            "
    fileSuffix:",  folderModel.get(index, "fileSuffix"),
                            "
      fileSize:",  folderModel.get(index, "fileSize"),
                            "
  fileModified:",  folderModel.get(index, "fileModified"),
                            "
  fileAccessed:",  folderModel.get(index, "fileAccessed"),
                            "
     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("
               folderModel.folder:", folderModel.folder,
                            "
         folderModel.parentFolder:", folderModel.parentFolder,
                            "
           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";
        }
    }
}

留此备忘。

原文地址:https://www.cnblogs.com/listensong/p/4202039.html