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

这篇具有很好参考价值的文章主要介绍了QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Qt 项目视图(Item Views)        

1.QListView

2.QTreeView

3.QTableView

二、Qt 项目部件(Item Widgets)

1.QListWidget

2.QTreeWidget

3.QTableWidget


一、Qt 项目视图(Item Views)        

qt qtreeview,QT,qt,开发语言,c++

控件名称依次解释如下:

  • 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());
}

编译执行结果:

qt qtreeview,QT,qt,开发语言,c++

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);

}

编译执行结果:

qt qtreeview,QT,qt,开发语言,c++

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 qtreeview,QT,qt,开发语言,c++

二、Qt 项目部件(Item Widgets)

qt qtreeview,QT,qt,开发语言,c++

控件名称依次解释如下:

  • List Widget : 清单控件
  • Tree Widget : 树形控件
  • Table Widget : 表控件
1.QListWidget

QListWidget是一个用于显示项目列表的Qt控件,每个项目可以包含文本、图像和小部件。它常用于显示媒体播放列表、文件列表和日历等应用程序中。QListWidget提供了许多方法和信号来管理和监视列表中的项目,例如添加、删除、选择、排序和拖放。同时它也支持多种视图模式,如列表模式、图标模式和流模式,可以根据应用程序的需要来选择不同的视图模式。

案例分析:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

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;
};
#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"

#include <QListWidget>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QListWidgetItem *qitem = new QListWidgetItem("程序员小佳");
    ui->listWidget->addItem(qitem);
    qitem->setTextAlignment(Qt::AlignCenter|Qt::AlignVCenter); // Alignment(对准) 将上面字中心对准

    QStringList slist;
    slist<<"程序员小佳牛逼";
    slist<<"程序员小佳最漂亮";

    ui->listWidget->addItems(slist);
}

Widget::~Widget()
{
    delete ui;
}

编译执行结果:

qt qtreeview,QT,qt,开发语言,c++

2.QTreeWidget

QTreeWidget是一个用于显示结构化数据的控件,它可以以树形结构展示数据,类似于Windows资源管理器或Mac Finder中的文件夹结构。QTreeWidget可以用于显示层次结构数据,例如文件系统、组织机构、分类标签等。每个节点可以包含子节点,可以展开或折叠来查看或隐藏子节点。通过使用QTreeWidget,可以方便地实现树形结构的展示和操作。

案例分析:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

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;
};
#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"

#include <QTreeWidget>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1:添加第一级节点
    QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui->treeWidget);
    topItem1->setText(0,"佛山大学");
    topItem1->setCheckState(0,Qt::Checked);
    ui->treeWidget->addTopLevelItem(topItem1);

    // 隐藏表头
    ui->treeWidget->setHeaderHidden(true);
    // 展开节点
    ui->treeWidget->expandAll();

    // 2:二级节点添加到一级节点的topItem1
    QTreeWidgetItem *item11 = new QTreeWidgetItem(topItem1);
    item11->setText(0,"佛山大学电信学院");
    item11->setCheckState(0,Qt::Checked);

    QTreeWidgetItem *item12 = new QTreeWidgetItem(topItem1);
    item12->setText(0,"佛山大学机电学院");
    item12->setCheckState(0,Qt::Checked);

    QTreeWidgetItem *item13 = new QTreeWidgetItem(topItem1);
    item13->setText(0,"佛山大学外国语学院");
    item13->setCheckState(0,Qt::Checked);

    // 1:添加第一级节点
    QTreeWidgetItem *topItem2 = new QTreeWidgetItem(ui->treeWidget);
    topItem2->setText(0,"广东财经大学");
    topItem2->setCheckState(0,Qt::Checked);
    ui->treeWidget->addTopLevelItem(topItem2);

    // 2:二级节点添加到一级节点的topItem1
    QTreeWidgetItem *item14 = new QTreeWidgetItem(topItem2);
    item14->setText(0,"广东财经大学电信学院");
    item14->setCheckState(0,Qt::Checked);

    QTreeWidgetItem *item15 = new QTreeWidgetItem(topItem2);
    item15->setText(0,"广东财经大学机电学院");
    item15->setCheckState(0,Qt::Checked);

    QTreeWidgetItem *item16 = new QTreeWidgetItem(topItem2);
    item16->setText(0,"广东财经大学外国语学院");
    item16->setCheckState(0,Qt::Checked);
}

Widget::~Widget()
{
    delete ui;
}

编译执行结果:

qt qtreeview,QT,qt,开发语言,c++

3.QTableWidget

QTableWidget是Qt框架中的一种控件,用于显示二维表格数据。它可以支持多种数据类型,包括字符串、整数、浮点数、布尔值和图像等。QTableWidget被广泛应用于表格数据的显示和编辑,例如电子表格、数据库表、日历等应用场景。QTableWidget提供了丰富的功能,例如自动排序、行列选择、单元格编辑、复制/粘贴、拖拽等。同时,QTableWidget还支持多种样式、颜色和字体等设置,以让开发者能够灵活定制表格外观和行为。

案例分析:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

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;
};
#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);

    // 设置表格行数和列数
    ui->tableWidget->setRowCount(3);
    ui->tableWidget->setColumnCount(2);

    // 设置水平表头
    QStringList slist;
    slist<<"学号"<<"考试分数";
    ui->tableWidget->setHorizontalHeaderLabels(slist);

    QList<QString> strno;
    strno<<"666"<<"777"<<"888";
    QList<QString> strscore;
    strscore<<"520"<<"530"<<"540";

    // 通过循环为表格赋值
    for(int i=0;i<3;i++){
        int data = 0;
        QTableWidgetItem *pitem = new QTableWidgetItem(strno.at(i));
        ui->tableWidget->setItem(i,data++,pitem);
        ui->tableWidget->setItem(i,data,new QTableWidgetItem(strscore.at(i)));
    }

}

Widget::~Widget()
{
    delete ui;
}

编译执行结果:

qt qtreeview,QT,qt,开发语言,c++文章来源地址https://www.toymoban.com/news/detail-806566.html

到了这里,关于QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt QTreeView简单使用

    QTreeView: 用于显示树状结构数据,适用于树状结构数据的操作。 ​ 利用QStandardlternModel来初始化数据,标准的基于项数据的数据模型类, 每个项数据可以是任何数据类型。 ​ 利用QStandardItem创建根节点与子节点的Item,并向内填充数据。数据类型可以为QString等字符,也可以是

    2024年02月03日
    浏览(60)
  • QT(C++)-QTreeview节点折叠与展开

    最近要用QT开发项目,对QT不是很熟,就根据网上的查到的知识和自己的摸索,将一些经验和知识记录下来。方便自己后续查找。 这个博客主要是QTreeview的节点折叠和展开。

    2024年02月10日
    浏览(34)
  • QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇

    接上一篇,我们需要继续完成以下的效果; 先上个效果图: 资源路径:https://download.csdn.net/download/turbolove/88192114?spm=1001.2014.3001.5503 上一篇我们绘制了标尺,并且我们修改了放大缩小和对应的背景,整体看来,我们的滚动条会和背景不搭配,因此我们需要修改我们的背景,这

    2024年02月13日
    浏览(36)
  • QT QTreeView\QTreeWidget控件 使用详解

             本文详细的介绍了QTreeView、QTreeWidget控件的各种操作,例如:新建界面、QTreeWidget、QTreeView、控件布局、设置列、设置宽高、设置列表头、设置复选框、设置图标、添加树、删除树、查找树、修改树、设置选中、树排序、事件、信号、槽函数、添加节点、默认选中

    2024年02月15日
    浏览(39)
  • QT基础:遍历QListWidget,及QListWidget简单演示,适合初学者食用

    QListWidget 是一个列表框,关于它的详细介绍可以参考:Qt QListWidget详解 初学者如果只是想在短时间内了解 QListWidget 的话,可以参考这里 1、打开QT,创建一个 widget 项目,在UI中加入 QListWidget 和一个 PushButton(等会备用) 可以双击 QListWidget 小部件 , 点左下角的 + 可以在里

    2024年02月12日
    浏览(48)
  • QT的QListWidget使用

     本文进行的了QListWidget的使用,设计了如上所示的UI界面信息,具有以下几个功能: 添加,插入,删除,显示模式调整等功能 初始化 模式确定 双击显示处理 具体处理的信号槽函数 结果显示

    2024年02月16日
    浏览(49)
  • 【QT】——QListWidget的使用

    目录 1.QListWidget和QListWidgetItem 2.外观 2.1列表模式 2.2图标模式 3.常用接口 4.示例 删除列表项 添加列表项 QListWidget 是qt中的列表框控件,它用于显示多个列表项, 列表项 对应的类是 QListWidgetItem . QListWidgetItem可以只包含文字 QListWidgetItem 中可以同时包含 图片和文字 。 列表框控

    2024年02月16日
    浏览(52)
  • Qt QListWidget列表框控件

    Qt中的列表框控件,对应的类是 QListWidget 它用于显示多个列表项,列表项对应的类是 QListWidgetitem QListWidget 有很多属性和方法,完整的可查看帮助文档。这里列出常用的属性和方法: 列表框控件,支持两种显示模式:列表模式和图标模式 其中, QListView::ViewMode 是一个枚举,有

    2024年02月02日
    浏览(45)
  • Qt中QListWidget/QListWidgetItem详解

    QListWidget是一个方便类,它提供了一个类似于QListView提供的列表视图,但具有一个经典的基于项目的界面,用于添加和删除项目。QListWidget使用一个内部模型来管理列表中的每个QListWidgetItem。 QListWidget - QListView - QAbstractItemView - QAbstractScrollArea - QFrame - QWidget 要获得更灵活的列表

    2024年02月01日
    浏览(46)
  • 【QT基础教程 十二】QListWidget类解析

    概要:本期介绍QListWidget类的使用,包含QListWidget如何添加项、删除项、遍历等操作。 头文件:#includeQListWidget 模块:QT += widgets 父类:QListView QListWidget类提供了一个基于项(QListWIdgetItem)的列表控件 ,它拥有属于自己的界面。当然,照我们之前说的,它也继承与QWidget类。 其

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包