您的位置:首页 > 移动开发 > Android开发

用Qt在Android上实现文件浏览器

2014-09-22 21:08 811 查看
       前阵子想过用Qt写一个符合android手机操作习惯的文件浏览器,今天动手实现了。

       查看网上关于这方面的例子,真是太少了,基本上都是介绍怎么用java来实现的。不过既然java能实现,那么c++肯定也能够实现。

Eclipse里面用的是ListView这个控件,刚好Qt有个QListView控件,名字相近,所以就选择使用它了。下面这个图是我设计的文件浏览器界面,设定成横版的了。

  


下面是代码部分:

DirectoryViewer.h


#ifndef DirectoryViewer_H

#define DirectoryViewer_H


#include <QDialog>

#include <QFileSystemModel>


namespace Ui {

class DirectoryViewer;

}


class DirectoryViewer : public QDialog

{

Q_OBJECT


public:

explicit DirectoryViewer(QWidget *parent = 0);

~DirectoryViewer();


public slots:

void btn_Choose_Clicked();

void btn_Return_Clicked();

void btn_Open_Clicked();

void Item_DoubleClicked(QModelIndex index);


public:

QString m_ChoosePath;

private:

Ui::DirectoryViewer *ui;

QFileSystemModel *model;

QString m_nCurrentPath;


QDir root_Dir;

QDir current_Dir;

QModelIndex index;

};


#endif // DirectoryViewer_H


DirectoryViewer.cpp


#include "DirectoryViewer.h"

#include "ui_DirectoryViewer.h"

#include <QDesktopWidget>


DirectoryViewer::DirectoryViewer(QWidget *parent) :

QDialog(parent),

ui(new Ui::DirectoryViewer)

{

ui->setupUi(this);
QDesktopWidget * deskTop = QApplication::desktop();

move( (deskTop->width()-this->width())/2,(deskTop->height()-this->height())/2);


model = new QFileSystemModel(this);

model->setFilter(QDir::AllEntries|QDir::NoDotAndDotDot);

root_Dir = QDir::rootPath();

m_nCurrentPath = root_Dir.absolutePath();


ui->listView->setModel(model);

ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));

ui->listView->show();


ui->lineEdit->setText(m_nCurrentPath);


QObject::connect(ui->btn_Ruturn,SIGNAL(clicked()),this,SLOT(btn_Return_Clicked()));

QObject::connect(ui->btn_Open,SIGNAL(clicked()),this,SLOT(btn_Open_Clicked()));

QObject::connect(ui->btn_Choose,SIGNAL(clicked()),this,SLOT(btn_Choose_Clicked()));

QObject::connect(ui->listView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(Item_DoubleClicked(QModelIndex)));


}


DirectoryViewer::~DirectoryViewer()

{

delete ui;

}


void DirectoryViewer::btn_Return_Clicked()

{

if(m_nCurrentPath.length()!= 0)

{

current_Dir = QDir(m_nCurrentPath);

current_Dir.cdUp();

m_nCurrentPath = current_Dir.absolutePath();


ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));

ui->listView->show();

ui->lineEdit->setText(m_nCurrentPath);

}

}


void DirectoryViewer::btn_Open_Clicked()

{

index = ui->listView->currentIndex();

if(m_nCurrentPath == "/")

{

m_nCurrentPath = "";

}

m_nCurrentPath = m_nCurrentPath + "/"+ index.data().toString();

ui->listView->setRootIndex(model->setRootPath(m_nCurrentPath));

ui->listView->show();

ui->lineEdit->setText(m_nCurrentPath);

}


void DirectoryViewer::btn_Choose_Clicked()

{

index = ui->listView->currentIndex();

if(m_nCurrentPath == "/")

{

m_nCurrentPath = "";

}

m_nCurrentPath = m_nCurrentPath + "/"+ index.data().toString();

m_ChoosePath = m_nCurrentPath;

this->close();

}



下面是实现效果图:





        有待改进的地方是,不应该有打开按钮,这样似乎不合适,应该可以在QListView的doubleClicked(QModeIndex)槽函数内实现这些。另外,常见的

安卓应用的文件浏览器,ListView的每个Item都有分割线,那样看起来更加的美观,以后有机会要尝试解决这两个问题,用Qt做出符合手机操作习惯的

文件浏览器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息