QT 项目视图(QListView&QTreeView&QTableView)和项目部件(QListWidget&QTreeWidget&QTableWidget)详解-1
https://developer.aliyun.com/article/1507899
二、Qt 项目部件(Item Widgets)
控件名称依次解释如下:
- 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(); }
#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; }
编译执行结果:
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; }
编译执行结果:
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; }
编译执行结果: