QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1

简介: QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解

一、Qt 项目视图(Item Views)      

控件名称依次解释如下:

  • List View:清单视图
  • Tree View: 树视图
  • Table View:表视图
  • Column View: 列视图
  • Undo View : 撤销命令视图


1.QListView

QListView是一个用于显示列表数据的Qt GUI组件。它基于模型/视图(Model/View)架构,可以通过QAbstractItemModel和其派生类来控制数据显示和交互。QListView提供了多种可视化选项,包括图标、文本、复选框等。


QListView的一些特性:


  1. 可以通过选择模式来控制用户交互,如单选、多选等。
  2. 可以对列表项进行排序。
  3. 可以通过自定义委托类来实现自定义外观和交互。
  4. 支持拖放、剪贴板复制和粘贴等操作。
  5. 可以通过设置多种属性来控制其行为和外观。
  6. 可以与其它Qt组件如QTreeView、QTableView等组合使用,实现更加复杂的模型/视图交互。


案例分析:


widget.h        

#ifndef WIDGET_H
#define WIDGET_H
 
#include <QWidget>
 
#include <QListView>
#include <QStringListModel> // 字符串列表模型
#include <QMessageBox>
 
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
 
class Widget : public QWidget
{
    Q_OBJECT
 
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
 
private:
    Ui::Widget *ui;
 
private:
    QListView *listview1;
private slots:
    void SlotClickedFunc(const QModelIndex &index);
 
};
#endif // WIDGET_H

main.cpp

#include "widget.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
 
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
 
    resize(450,250);
 
    listview1 = new QListView(this);
    listview1->setGeometry(20,20,240,160);
 
    // 创建数据显示至清单视图(之前)
    QStringList qlist;
    qlist.append("运动类:篮球、足球");
    qlist.append("娱乐类:看电影、写小说、听音乐");
    qlist.append("游戏类:五子棋、扑克牌、中国象棋");
    qlist.append("旅游类:国外旅游、国内旅游");
 
    // 用数据列表创建数据显示模型进行实现
    QStringListModel *listmode = new QStringListModel(qlist);
    listview1->setModel(listmode);
 
    connect(listview1,SIGNAL(clicked(const QModelIndex)),this,SLOT(SlotClickedFunc(const QModelIndex)));
}
 
Widget::~Widget()
{
    delete ui;
}
 
void Widget::SlotClickedFunc(const QModelIndex &index)
{
    QMessageBox::information(NULL,"兴趣爱好","你选的类型为:\n"+index.data().toString());
}
 

编译执行结果:

2.QTreeView

QTreeView是一个QT控件,通常用于显示和编辑树形结构数据。它是基于MVC(Model-View-Controller)设计模式构建的。 QTreeView提供了一种简单而强大的方式来展示具有层次结构的数据,例如文件系统目录结构或组织机构。


QTreeView支持以下功能:


1.可展开和折叠子项目


2.可通过单击来选中和选择多个项目


3.可通过拖放来重新排列和移动项目


4.可通过自定义代理来定制显示元素


5.支持所选项目的键盘导航


6.可通过过滤器来筛选显示项目


7.支持水平和垂直滚动


QTreeView的使用非常灵活,可以与任何数据模型一起使用,只需将QAbstractItemModel代理到QTreeView中即可。根据数据模型的不同,QTreeView可以轻松地显示各种树形结构数据,例如XML文档、SQLite数据库或JSON文件。


案例分析:


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
#include <QStandardItemModel>
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
public:
    void InitTreeViewFunc();
    QStandardItemModel *sItemMode,*mModel;
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    InitTreeViewFunc(); // 在构造函数调用树视图控件
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::InitTreeViewFunc() // 初始化树视图控件
{
    // 1:构造model
    sItemMode = new QStandardItemModel(ui->treeView);
    sItemMode->setHorizontalHeaderLabels(QStringList()<<QStringLiteral("编号") << QStringLiteral("初中部|高中部"));     //设置列头
 
    // 创建一级节点,将它加入到sItemModel
    QList<QStandardItem*> item11;
    QStandardItem *item1=new QStandardItem(QString::number(1));
    QStandardItem *item2=new QStandardItem("初中部");
    item11.append(item1);
    item11.append(item2);
    sItemMode->appendRow(item11);
 
    // 二级节点,添加到第一个一级节点
    QList<QStandardItem*> item112;
    QStandardItem *item1121=new QStandardItem(QString::number(2));
    QStandardItem *item1122=new QStandardItem(QStringLiteral("一年级"));
 
    item112.append(item1121);
    item112.append(item1122);
    item1->appendRow(item112);
 
    // 三级节点,添加到第一个二级节点
    QList<QStandardItem*> item1231;
    QStandardItem *item12311=new QStandardItem(QString::number(3));
    QStandardItem *item12312=new QStandardItem(QStringLiteral("一班"));
    item1231.append(item12311);
    item1231.append(item12312);
    item1121->appendRow(item1231);
 
    QList<QStandardItem*> item1232;
    QStandardItem *item12321=new QStandardItem(QString::number(3));
    QStandardItem *item12322=new QStandardItem(QStringLiteral("二班"));
    item1232.append(item12321);
    item1232.append(item12322);
    item1121->appendRow(item1232);
 
    QList<QStandardItem*> item1233;
    QStandardItem *item12331=new QStandardItem(QString::number(3));
    QStandardItem *item12332=new QStandardItem(QStringLiteral("三班"));
    item1233.append(item12331);
    item1233.append(item12332);
    item1121->appendRow(item1233);
 
    // 创建一级节点,将它加入到sItemModel
    QList<QStandardItem*> item12;
 
    QStandardItem *item3=new QStandardItem(QString::number(2));
    QStandardItem *item4=new QStandardItem("高中部");
 
    item12.append(item3);
    item12.append(item4);
    sItemMode->appendRow(item12);
 
    // 2:给QTreeView应用model
    ui->treeView->setModel(sItemMode);
 
}

编译执行结果:

3.QTableView

QTableView是Qt框架中的一个类,用于展示和编辑表格数据。它提供了一个表格视图,在其中可以显示由数据模型提供的表格数据。它还提供了诸如排序、编辑、选择、拖放等功能。


QTableView可以使用任何继承自QAbstractItemModel的模型类提供数据。模型将提供行和列数据,QTableView控件将使用这些数据在表格中显示。


QTableView还支持自定义单元格内容和样式,可以根据需要设置单元格的背景颜色、前景颜色、字体等。


案例分析:


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private:
    Ui::MainWindow *ui;
 
public:
    void InitTableViewFunc();
 
};
#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
 
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QStandardItemModel>
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    InitTableViewFunc(); // 调用自定义函数
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
void MainWindow::InitTableViewFunc()
{
    // 1:添加表头,准备数据模型
    QStandardItemModel *stuMode = new QStandardItemModel();
    stuMode->setHorizontalHeaderItem(0,new QStandardItem(QObject::tr("学号")));
    stuMode->setHorizontalHeaderItem(1,new QStandardItem(QObject::tr("姓名")));
    stuMode->setHorizontalHeaderItem(2,new QStandardItem(QObject::tr("性别")));
    stuMode->setHorizontalHeaderItem(3,new QStandardItem(QObject::tr("分数")));
 
    // 通过API函数将数据模型绑定到QTableView
    ui->tableView->setModel(stuMode);
 
    // 设备表格列的宽度
    ui->tableView->setColumnWidth(0,120);
 
    // 2:添加数据信息
    stuMode->setItem(0,0,new QStandardItem("666"));
    stuMode->setItem(0,1,new QStandardItem("罗师傅"));
    stuMode->setItem(0,2,new QStandardItem("男"));
    stuMode->setItem(0,3,new QStandardItem("520"));
 
    stuMode->setItem(1,0,new QStandardItem("777"));
    stuMode->setItem(1,1,new QStandardItem("李黑鬼"));
    stuMode->setItem(1,2,new QStandardItem("女"));
    stuMode->setItem(1,3,new QStandardItem("530"));
 
    stuMode->setItem(2,0,new QStandardItem("888"));
    stuMode->setItem(2,1,new QStandardItem("周阿川"));
    stuMode->setItem(2,2,new QStandardItem("男"));
    stuMode->setItem(2,3,new QStandardItem("540"));
 
    stuMode->setItem(3,0,new QStandardItem("999"));
    stuMode->setItem(3,1,new QStandardItem("洪炯江鸟"));
    stuMode->setItem(3,2,new QStandardItem("男"));
    stuMode->setItem(3,3,new QStandardItem("550"));
 
    // 设置禁止编辑
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
 
    stuMode->sort(3,Qt::DescendingOrder); // 设置降序排列
 
}

编译执行结果:


QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-2

https://developer.aliyun.com/article/1507903

相关文章
|
3天前
|
网络协议 容器
【qt】 TCP编程小项目
【qt】 TCP编程小项目
9 0
|
4天前
【qt】项目移植
【qt】项目移植
5 0
【qt】项目移植
|
10天前
【Qt项目专栏】贪吃蛇小游戏1.0
【Qt项目专栏】贪吃蛇小游戏1.0
27 5
|
3天前
|
数据安全/隐私保护
【qt】考试系统项目
【qt】考试系统项目
9 0
|
4天前
【qt】平面CAD(计算机辅助设计 )项目 上
【qt】平面CAD(计算机辅助设计 )项目 上
5 0
|
6天前
|
XML Linux 程序员
【Qt】项目代码
【Qt】项目代码
|
2月前
|
C++ Windows
第1个Qt项目:计算器
第1个Qt项目:计算器
第1个Qt项目:计算器
|
1月前
|
机器学习/深度学习 人工智能 计算机视觉
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
好的资源-----打卡机+Arm+Qt+OpenCV嵌入式项目-基于人脸识别的考勤系统-----B站神经网络与深度学习,商城
|
2月前
|
关系型数据库 MySQL 项目管理
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
数据库大作业——基于qt开发的图书管理系统(四)项目目录的整理与绘制登录页面
|
2月前
|
安全 BI 数据库
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析
数据库大作业——基于qt开发的图书管理系统 (一)环境的配置与项目需求的分析