- 思考:
QTableWidget在某种程度上可以等价为QStandardItemModel,同理,其他的功能也有类似的等价,但是以当前的QTableWidget和QStandardItemModel为例的话,两者都是用于实现建立表格的相关组件,只不过QStandardItemModel使用更为灵活,可以自定义自己的模型
一 QFileSystemModel,list,view,tree view应用于文件模型









- 知识点:下列案例是
QFileSystemModel文件模型的应用
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QFileSystemModel>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_treeView_clicked(const QModelIndex &index);
private:
Ui::MainWindow *ui;
QFileSystemModel *model;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建模型
model = new QFileSystemModel;
//设置文件系统模型的根目录
//在这指定的目录下安装了一个文件系统监视器,这个目录下的文件信息的改变都会显示在这个模型里面
model->setRootPath(QDir::currentPath());
//关联模型和"视图"
ui->treeView->setModel(model);
ui->listView->setModel(model);
ui->tableView->setModel(model);
//list,tree,table是三种view,实现的功能是一样的,只是对当前文件系统的显示方式不一样
//使用信号槽,通知其他视图的即使变化,实现3种view同步变化
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->listView, SLOT(setRootIndex(QModelIndex)));
connect(ui->treeView,SIGNAL(clicked(QModelIndex)),ui->tableView, SLOT(setRootIndex(QModelIndex)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_treeView_clicked(const QModelIndex &index)
{
ui->labelFileName->setText(model->fileName(index));
float size = model->size(index) /1024; //?k
qDebug() << "size " << size;
if(size >1024){
ui->labelFileSize->setText(QString::asprintf("%.1f MB", size/1024.0)) ;
}else
{
ui->labelFileSize->setText(QString::asprintf("%f kB", size)) ;
}
ui->labelNodeType->setText(model->type(index));
ui->checkBox->setChecked(model->isDir(index));
ui->labelFilePath->setText(model->filePath(index));
}
二 QStringListModel
-
知识点:总结来说,模型的使用,包括以下几个步骤:
-
在.h文件中,定义模型指针
QStringListModel *model;; -
在cpp文件的构造函数中,构建模型
model= new QStringListModel;, -
构造数据/导入数据,
QStringList addrList = {"北京","上海","广州","深圳","贵州","杭州","深圳"}; model->setStringList(addrList); -
模型和组件的关联
ui->listView->setModel(model);

- 数据添加完毕后,让鼠标选中新添加的数据新型显示
ui->listView->setCurrentIndex(index);
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStringListModel>
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
void on_pushButtonEndAdd_clicked();
void on_pushButtonInsert_clicked();
void on_pushButtonDelete_clicked();
void on_pushButtonClear_clicked();
void on_pushButtonInit_4_clicked();
void on_pushButtonInit_3_clicked();
void on_pushButtonInit_2_clicked();
private:
Ui::MainWindow *ui;
QStringListModel *model;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建模型
model= new QStringListModel;
//构造数据/导入数据
QStringList addrList = {
"北京","上海","广州","深圳","贵州","杭州","深圳"};
model->setStringList(addrList);
//关联
ui->listView->setModel(model);
ui->tableView->setModel(model);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButtonEndAdd_clicked()
{
//在尾部插入一行
model->insertRow(model->rowCount());
QModelIndex index = model->index(model->rowCount()-1,0); //获取最后一行第0列数据
//设置插入行的数据
model->setData(index,"新的城市");
//数据添加完毕后,让鼠标选中新添加的数据新型显示
ui->listView->setCurrentIndex(index);
}
void MainWindow::on_pushButtonInsert_clicked()
{
QModelIndex index = ui->listView->currentIndex();
model->insertRow(index.row());
model->setData(index,"插入新的城市");
ui->listView->setCurrentIndex(index);
}
void MainWindow::on_pushButtonDelete_clicked()
{
QModelIndex index = ui->listView->currentIndex();
model->removeRow(index.row());
}
void MainWindow::on_pushButtonClear_clicked()
{
model->removeRows(0,model->rowCount());
}
void MainWindow::on_pushButtonInit_4_clicked()
{
QStringList list = model->stringList();
ui->plainTextEdit->clear();
for(int i = 0; i < list.count(); i++){
ui->plainTextEdit->appendPlainText(list[i]);
}
}
void MainWindow::on_pushButtonInit_3_clicked()
{
ui->plainTextEdit

最低0.47元/天 解锁文章
7213

被折叠的 条评论
为什么被折叠?



