内容简介:这次要和大家分享的是QListView,它为模型提供列表或图标视图。体系的搭建需要大量的基础知识铺垫,并且要不断总结。目前我还是主要写功能方面的应用,所以一般直接上码。接下来的文章会以ListView为切入点,简单说下
表格、列表和树型窗口部件是 GUI 开发中经常会用到的窗口部件。这些窗口部件有两种不同的方式来获取数据。传统的方式是窗口部件本身包含用于存储数据的内置容器。这种方式非常符合直观感受,然而,在许多复杂的应用中,这将导致数据的同步问题。第二种方式是模型 / 视图编程,窗口部件无需维护内部的数据容器。它们通过标准的接口获取外部数据,也因此避免了数据的重复。这在一开始可能会显得复杂,然而一旦你更仔细地观察之后,它不但很容易理解,而且它所具有的很多优点也会逐渐变得清晰明了。 ( 翻译自 Model/View Tutorial ,具体更多信息可参见 Qt 的 Model/View Tutorial)
这次要和大家分享的是QListView,它为模型提供列表或图标视图。 QListView 类是 Model / View Classes 之一,是 Qt 模型 / 视图框架的一部分。此类用于提供先前由 QListBox 和 QIconView 类提供的列表和图标视图。目前我比较常用的是和 Qt 的 Model 一起使用。
体系的搭建需要大量的基础知识铺垫,并且要不断总结。目前我还是主要写功能方面的应用,所以一般直接上码。接下来的文章会以ListView为切入点,简单说下 Qt Model/View 与一些窗口部件的联系。
本Demo是通过 ListView 刷新指定文件夹下的文件,并可以根据用户的选择删除文件。
环境:ubuntu 14.04 ,Qt Creator 5.5.1
① widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileSystemModel>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pbn_refresh_clicked();
void on_pbn_delete_clicked();
private:
Ui::Widget *ui;
QFileSystemModel m_fileModel;
};
#endif // WIDGET_H
该部分主要定义了Qt 文件系统模型,其他没啥要说的了。。。
② widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QMessageBox>
#define FILENPATH "/root/Qt/ListView/Python"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->listView->setMovement(QListView::Static); //prevent items from being moved
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pbn_refresh_clicked()
{
m_fileModel.setRootPath(FILENPATH);
ui->listView->setModel(&m_fileModel);
ui->listView->setViewMode(QListView::IconMode); //ListMode
ui->listView->setRootIndex(m_fileModel.index(FILENPATH));
}
void Widget::on_pbn_delete_clicked()
{
QModelIndex currentIndex = ui->listView->currentIndex();
QString m_strFileName = "/root/Qt/ListView/Python/";
m_strFileName += currentIndex.sibling(currentIndex.row(),0).data().toString();
QFile m_clsFile(m_strFileName);
QFileInfo m_clsFileInfo(m_strFileName);
if(!m_clsFileInfo.isFile())
{
QMessageBox::warning(this,tr("Warning"),tr("Please select a file!"));
return;
}
else
{
int ret = QMessageBox::information(this, tr("Message"),
tr("Are you sure delete the file?"),
QMessageBox::Cancel|QMessageBox::Ok);
switch (ret) {
case QMessageBox::Cancel:
break;
case QMessageBox::Ok:
{
m_clsFile.remove();
}
break;
default:
break;
}
}
}
widget.cpp中主要是刷新文件的槽与删除文件槽的实现。构造函数中设置显示的文件不允许被移动,如果不设置默认是可以被移动的。
刷新文件的槽:
①文件模型设置文件路径
② ListView 设置模型种类
③ ListView 设置显示视图种类,列表或是图标
④ ListView 设置索引,说实话,目前不大懂。。。
删除文件的槽:
获取当前选中文件的索引, 通过 currentIndex.sibling(currentIndex.row(),0).data().toString() 获取文件名。使用 QFile 来删除文件。
程序运行结果:
①执行结果界面
②刷新按钮结果
③删除文件询问
④删除文件结果
刚开始使用 model/view,有不妥的地方望大家见谅。接下来的文章会和大家分享下文件过滤以及从 U 盘中拷贝文件的操作。
欢迎大家关注公众号!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cracking the Coding Interview
Gayle Laakmann McDowell / CareerCup / 2015-7-1 / USD 39.95
Cracking the Coding Interview, 6th Edition is here to help you through this process, teaching you what you need to know and enabling you to perform at your very best. I've coached and interviewed hund......一起来看看 《Cracking the Coding Interview》 这本书的介绍吧!