文件瀏覽器

原文參考http://www.cnblogs.com/listensong/p/4202039.html

相關的知識點先說一下,其實沒什麼,就ListView的應用,然後目錄的信息通過導入包

import Qt.labs.folderlistmodel 2.1

效果如圖:


分爲三部分:返回父目錄,當前目錄顯示,下面的分隔部分.

自定義一個組件,方便調用

import QtQuick 2.0

Rectangle{
    id:rec;
    implicitWidth:100;
    implicitHeight: 50;
    property alias text: text.text;
    property alias fontSize: text.font.pixelSize;
    property alias source: img.source;
    property bool selectable
    property bool isdir
    property alias area: area

    color: "#212126";
    Image{
       id:img;
       width: 60;
       height: 45;
       anchors.verticalCenter: parent.verticalCenter;
       anchors.left: parent.left;
       anchors.margins: 10;
           fillMode: Image.PreserveAspectCrop   //deng bi suo fang
           clip:true      //limits area
    }

    MouseArea{
        id:area
        anchors.fill:parent;
        onClicked: {
            console.log("zidingyi clicked");
        }
    }

    Rectangle{
        anchors{
            top:img.bottom;
            left:parent.left;
            right:parent.right;
            margins: 10;
        }
        height:2;
        color:"lightgrey";
    }
    Text{
        id:text;
        anchors.left: img.right;
        anchors.verticalCenter: img.verticalCenter;
        color:"white";
    }
}
然後是main.qml

import QtQuick 2.3
import Qt.labs.folderlistmodel 2.1
import QtQuick.Controls 1.2
import QtQuick.Window 2.0
import "./wuyu"
Window{
    width: Screen.width;
    height:Screen.height;
    visible: true;
    property string folderPathName: "file:///home/rootor";
    property int lineHeight: 90;

    Rectangle {
        id:root;
        anchors.fill: parent;
        state:"hidden";
        color: "#212126";

        LineStyle{
            id:topLine;
            text: "...";
            width: root.width;
            height: lineHeight;
            fontSize:40;
            source: "return.png";
            area.onClicked: {
                if (folderModel.parentFolder != ""){
                    folderPathName = folderModel.parentFolder;
                }
                else{
                    root.state = "hidden";
                }
//                console.log("topLine root.folderPathName:", 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:lineHeight;
                width:root.width;
                fontSize:35;
                source: folderModel.get(index, "fileIsDir")?"folder.png":"file.png";
                isdir: folderModel.get(index, "fileIsDir")?true:false;
                area.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)){
                        folderPathName = folderModel.get(index, "fileURL");
                    }
                }
            }
            model: FolderListModel{
                id:folderModel;
                objectName: "folderModel";
                showDirs: true;
                showFiles: true;
                showDirsFirst: true;
                //nameFilters: ["*.mp3", "*.flac"];
                folder:folderPathName;
                onFolderChanged: {
                    console.log("onFolderChanged root.folderPathName:", 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";
            }
        }
    }
}
目前還存在的一個問題是在變動頁面時文字會莫名其妙的丟失,最大化窗口後文字又會顯示出來.找不出來原因.

 


發佈了41 篇原創文章 · 獲贊 14 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章