QT基础教程四--单元组件

文章目录

  • 列表单元组件QListWidget
  • 树形单元组件QTreeWidget
  • 表格视图QTableWidget
  • 单元组件和视图组件的区别

部分内容摘自: https://blog.51cto.com/9291927/1868359
QT有三种单元组件,分别为列表单元组件QListWidget、树形单元组件QTreeWidget、表格单元组件QTableWidget。

列表单元组件QListWidget

1、QListWidget组件简介

QListWidget列表单元组件继承自QListView,是基于单元的列表组件。QListWidget可以显示一个清单,清单中的每个项目是QListWidgetItem的一个实例,每个项目可以通过QListWidgetItem来操作。可以通过QListWidgetItem来设置每个项目的图像与文字。

2、QListWidget组件属性

A、name:组件对应源代码内的名称
B、font:设置表格内部的字体
C、count:保持项目的数目
D、currentRow:保持当前项目的行
E、sortingEnabled:是否对item排序

3、QListWidget组件常用成员函数

功能 函数原型
构造父对象为parent的ListWidget QListWidget::QListWidget(QWidget *parent = 0)
添加项item void QListWidget::addItem(QListWidgetItem *item)
添加一个新的项,在新添加的项目中添加label标签 void QListWidget::addItem(const QString &label)
添加一列项 void QListWidget::addItems(const QStringList &labels)
清除该ListWidget中的所有项目 void QListWidget::clear()[slot]
返回当前活动的项目 QListWidgetItem *QListWidget::currentItem()const
如果项目item是可编辑的,开始编辑项目item void QListWidget::editItem(QListWidgetItem *item)
查找匹配字符串text的项目,并返回查找结果 QListQListWidget::findItems(const QString &text,Qt::MatchFlags flags)const
在行row处插入项目item void QListWidget::insertItem(int row,QListWidgetItem * item)
在行row处插入标签为label的新项目 void QListWidget::insertItem(int row,const QString &label)
在行row处插入一列项目 void QListWidget::insertItem(int row,const QStringList &labels)
返回行row处的项目,如果行row处没有项目则返回0 QListWidgetItem *QListWidget::item(int row)const
返回点p处的项目 QListWidgetItem *QListWidget::itemAt(const QPoint &p)const
返回坐标(x,y)处的项目 QListWidgetItem *QListWidget::itemAt(int row,int y)const
返回项目item处显示的控件 QWidget *QListWidget::itemWidget(QListWidgetItem *item)const
移除行row处的项目,并返回项目控件 QListWidgetItem *QListWidget::takeItem(int row)
移除项目item处的控件 void QListWidget::removeItemWidget(QListWidgetItem *item)
返回项目item所在的行 int QListWidget::row(const QListWidgetItem *item)cosnt
返回所有被选中的项目的控件 QList QListWidget::selectedItems()const
设置项目item为当前项目 void QListWidget::setcurrentItem(QListWidgetItem *item)
设置控件widget为项目item的显示控件 void QListWidget::setItemWidget(QListWidgetItem *item,QWidget *widget)
把项目按照order进行排序 void QListWidget::sortItems(Qt::SortOrder order = Qt::AscendingOrder)

示例代码:

头文件:
#pragma once
#pragma execution_character_set("utf-8")
#include 
#include "ui_QtWidgetsApplication2.h"
#include
#include
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget* parent = 0);
    ~MainWindow();

private:
    QListWidget* m_listWidget;       // 用于管理好友列表
    QStackedWidget* m_stackedWidget; // 用于管理多个对话页面

    void setupUi();

private slots:
    // 点击好友列表中的项,切换到对应的对话页面
    void switchToConversation(QListWidgetItem* item);
};
源文件:
/*
author::pp
description::模拟qq对话界面
*/
#include "QtWidgetsApplication2.h"
#include 
#include 
#include 
#include 
#include 
#include
MainWindow::MainWindow(QWidget* parent)
	: QMainWindow(parent)
{
	// 初始化界面
	setupUi();
}

MainWindow::~MainWindow()
{
}

void MainWindow::setupUi()
{
	QWidget* centralWidget = new QWidget(this);
	//设置为窗口中心部件  
	//设置一个窗口部件作为中心窗口部件时,它会自动占据主窗口的中心位置,铺满整个窗口。
	setCentralWidget(centralWidget);

	// 创建好友列表控件
	m_listWidget = new QListWidget();
	connect(m_listWidget, &QListWidget::itemClicked, this, &MainWindow::switchToConversation);

	// 向好友列表中添加几个项,用于演示
	m_listWidget->addItem(new QListWidgetItem(QIcon("D:/图片/Camera Roll/QQ图片20221204111145.jpg"), "Friend 1"));
	m_listWidget->addItem(new QListWidgetItem(QIcon("D:/图片/Camera Roll/微信图片_20220622234741.jpg"), "Friend 2"));
	m_listWidget->addItem(new QListWidgetItem(QIcon("D:/图片/Camera Roll/微信图片_20220622234740.jpg"), "Friend 3"));

	// 创建对话页面控件
	m_stackedWidget = new QStackedWidget();

	// 向对话页面中添加几个页面,用于演示
	for (int i = 0; i < m_listWidget->count(); i++)
	{
		QWidget* page = new QWidget();
		m_stackedWidget->addWidget(page);
		QVBoxLayout* layout = new QVBoxLayout(page);
		layout->addWidget(new QLabel(tr("Conversation with %1").arg(m_listWidget->item(i)->text()), page));
		layout->addWidget(new QTextEdit(page));
	}

	 QHBoxLayout* hLayout = new QHBoxLayout(centralWidget);
	 hLayout->addWidget(m_listWidget);
	 hLayout->addWidget(m_stackedWidget);


	 // 设置主窗口的标题、大小和位置
	setWindowTitle(tr("QQ对话界面"));
	resize(600, 500);
	move(200, 200);
}

void MainWindow::switchToConversation(QListWidgetItem* item)
{
	// 切换到选中好友对应的对话界面
//获取QListWidget中选中条目的索引
	int index = m_listWidget->row(item);
//切换到控件栈中该索引对应的控件
	m_stackedWidget->setCurrentIndex(index);
}

演示效果:
QT基础教程四--单元组件_第1张图片

树形单元组件QTreeWidget

1、QTreeWidget组件简介

QTreeWidget树形单元组件继承自QTreeView类,是树形视图使用预定义的模型,也是基于模型/视图结构的组件,为方便开发人员使用树形视图,可以用来来创建简单地树形结构列表。通过QTreeWidget类和QTreeWidgetItem类实现树形结构,QTreeWidgetItem类实现结点的添加。

2、QTreeWidget组件属性

A、name:组件对应源代码内的名称
B、font:设置表格内部的字体
C、columnCount:保存TreeWidget的列数

3、QTreeWidget组件常用成员函数

功能 函数原型
构造一个父对象为parent的TreeWidget QTreeWidget::QTreeWidget(QWidget *parent = 0)
在QTreeWidget组件中追加item为顶级项目 void QTreeWidget::addTopLevelItem(QTreeWidgetItem * item)
把items中的项目作为顶级项目追加到该TreeWidget中 void QTreeWidget::addTopLevelItems(const QList &items)
清除TreeWidget中的所有项目 void QTreeWidget::clear()[slot]
折叠项目item void QTreeWidget::collapseItem(const QTreeWidgetItem *item)[slot]
返回当前活动列 int QTreeWidget::currentColumn()const
返回当前活动项目 QTreeWidgetItem *QTreeWidget::currentItem()const
如果列column的item是可编辑的,开始编辑
void QTreeWidget::editItem(QTreeWidgetItem *item,int column = 0)
展开项目 void QTreeWidget::expandItem(const QTreeWidgetItem *item)[slot]
查找匹配字符串的text的项目,并返回查找结果 QList QTreeWidget::findItems(const QString &text,Qt::MatchFlags flags,int column = 0)const
返回头项目 QTreeWidgetItem *QTreeWidget::headerItem()const
返回列column的项目item模型索引 QModelIndex QTreeWidget::indexFromItem(QTreeWidgetItem *item,int column = 0)const [protected]
返回顶级项目item的模型索引,如果item不存在返回-1 int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem *item)const
返回排序的列 int QTreeWidget::sortColumn()const
对列column的项目按照order进行排序 void QTreeWidget::sortItems(int column,Qt::SortOrder order)
返回item的上一个项目 QTreeWidgetItem *QTreeWidget::itemAbove(const QTreeWidgetItem *item)const
返回点p处的项目 QTreeWidgetItem *QTreeWidget::itemAt(const QPoint &p) const
返回坐标(x,y)处的项目 QTreeWidgetItem *QTreeWidget::itemAt(int x,int y)const
设置控件widget为项目item的显示控件,项目item在列column中 void QTreeWidget::setItemWidget(QTreeWidgetItem *item,int column,QWidget *widget)
返回item的下一个项目 QTreeWidgetItem *QTreeWidget::itemBelow(const QTreeWidgetItem *item)const
返回列column中的项目item显示控件 QWidget *QTreeWidget::itemWidget(QTreeWidgetItem *item,int column)const
移除列column中的项目item的显示控件 void QTreeWidget::removeItemWidget(QTreeWidgetItem *item,int column)
返回所有选中状态的项目 QList QTreeWidget::selectItems()const
设置item为当前项目 void QTreeWidget::setCurrentItem(QTreeWidgetItem *item)
设置列column的项目item为当前项目 void QTreeWidget::setCurrentItem(QTreeWidgetItem *item,int column)
设置item为该TreeWidget的头项目 void QTreeWidget;:setHeaderItem(QTreeWidgetItem *item)
设置label为头标题 void QTreeWidget::setHeaderLabel(const QString &label)
返回所有index的顶级项目 QTreeWidgetItem *QTreeWidget::topLevelItem(int index)cosnt

示例代码:

#include "QTreeWidgetTest.h"
#include 
#include
#include
int main(int argc, char* argv[])
{
	QApplication a(argc, argv);
	QWidget* widget = new QWidget;
	QTreeWidget* tree = new QTreeWidget(widget);
	//设置列数
	tree->setColumnCount(2);
	//设置头的标题  如果只有一个标题(单列)那么只要用tree->setHeaderLabel就行了,
	//但是如果有多个标题(多列)就要用tree->setHeaderLabels(const QStringList &labels)
	tree->setHeaderLabels({ QString::fromLocal8Bit("图片下载"),QString::fromLocal8Bit("大小") });
	QTreeWidgetItem* Item1 = new QTreeWidgetItem(tree);
	Item1->setText(0, QString::fromLocal8Bit("动物图片"));
	QTreeWidgetItem* Item11 = new QTreeWidgetItem(Item1); //子节点1
	Item11->setText(0,QString::fromLocal8Bit("pig"));
	Item11->setText(1, QString::fromLocal8Bit("1.2mb"));
	Item1->addChild(Item11); //添加子节点
	QTreeWidgetItem* Item2 = new QTreeWidgetItem(tree);
	Item2->setText(0,QString::fromLocal8Bit("水果图片2"));
	QTreeWidgetItem* Item21 = new QTreeWidgetItem(Item2, QStringList(QString::fromLocal8Bit("葡萄"))); //子节点1
	Item21->setText(0, QString::fromLocal8Bit("葡萄"));
	Item21->setText(1, QString::fromLocal8Bit("892kb"));
	QTreeWidgetItem* Item22 = new QTreeWidgetItem(Item2); //子节点2
	Item22->setText(0, QString::fromLocal8Bit("西瓜"));
	Item22->setText(1, QString::fromLocal8Bit("995kb"));
	Item2->addChild(Item21);  //添加子节点
	Item2->addChild(Item22);
	tree->expandAll(); //结点全部展开
	 //添加布局
	QHBoxLayout* lay = new QHBoxLayout(widget);
	lay->addWidget(tree);
	widget->show();

	return a.exec();
}

演示效果:

QT基础教程四--单元组件_第2张图片

表格视图QTableWidget

1、QTableView组件简介
QTableWidget表格单元组件继承自QTableView,QTableView可以使用自定义的数据模型来显示内容,而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的,QTableWidgetItem用来表示表格中的一个单元格,整个表格都需要用逐个单元格构建起来。

2、QTableWidget组件属性

A、name:组件对应源代码内的名称
B、font:设置表格对应的字体
C、columnCount:保存列的数目
D、rowCount:保存行的数目

3、QTableWidget组件常用成员函数:

功能 函数原型
QTableWidget::QTableWidget(QWidget * parent = 0)
构造一个父对象为parent的TableWidget
QTableWidget::QTableWidget(int rows,int columns,QWidget *parent = 0)
构造一个rows行,columns列,父对象为parent的TableWidget控件
QWidget *QTableWidget::cellWidget(int row,int column)const
返回行row,列column的单元格处的控件
void QTableWidget::clear()[slot]
删除该TreeWidget中的所有项目
void QTableWidget::clearContents()[slot]
删除该TreeWidget中除了header外的所有项目
int QTableWidget::column(const QTableWidgetItem *item)const
返回项目item所在的列
int QTableWidget::currentColumn()const
返回当前活动的列
QTableWidgetItem *QTableWidget::currentItem()const
返回当前活动的项目
int QTableWidget::currentRow()const
返回当前活动的行
void QTableWidget::editItem(QTableWidgetItem *item)
如果item是可编辑的,开始编辑item
QList QTableWidget::findItems(const QString &text,Qt::MatchFlags flags)const
查找匹配字符串text的项目,并返回查找结果
void QTableWidget::insertColumn(int column)[slot]
在列column处插入新列
void QTableWidget::insertRow(int row)[slot]
在行row处插入新行
QTableWidgetItem *QTableWidget::item(int row,int column)const
返回行row、列column处的项目
QTableWidgetItem *QTableWidget::itemAt(const QPoint &point)const
返回点point处的项目
QTableWidgetItem *QTableWidget::itemAt(int ax,int ay)const
返回坐标(ax,ay)处的项目
void QTableWidget::removeCellWidget(int row,int column)
移除行row、列column单元格处的显示控件
void QTableWidget::removeColumn(int column)[slot]
移除列column
void QTableWidget::removerRow(int row)[slot]
移除行row
int QTableWidget::row(const QTableWidgetItem *item)cosnt
返回item的行
QList QTableWidget::selectedItems()
返回所有选中状态的项目
void QTableWidget::setCellWidget(int row,int column,QWidget *widget)
设置行row、列column处的显示控件为widget。
void QTableWidget::setCurrentCell(int row,int column)
设置行row,列column处的单元格为当前活动单元格
void QTableWidget::setCurrentItem(QTableWidgetItem *item)
设置项目item为当前活动项目
void QTableWidget::setHorizontalHeaderItem(int column,QTableWidgetItem *item)
设置项目item为列column的水平头项目,功能同setVerticalHeaderItem()
void QTableWidget::setHorizontalHeaderLabels(const QStringList *labels)
设置水平标题为labels,功能同setVerticalHeaderLabels()
void QTableWidget::setItem(int row,int column,QTableWidgetItem *item)
设置行row、列column的单元格的项目为item
void QTableWidget::sortItems(int column,Qt::SortOrder order = Qt::AscendingOrder)
对列column按照order进行排序
QTableWidgetItem *QTableWidget::takeHorizonalHeaderItem(int column)
移除列column的水平头项目,功能同takeVerticalHeaderItem()
QTableWidgetItem *QTableWidget::takeItem(int row,int column)
移除行row、列column单元格处的项目
QTableWidgetItem *QTableWidget::verticalHeaderItem(int row)const
返回行row的垂直头项目

示例代码:

#include 
#include 
#include 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
//创建一个10行5列的表格
    QTableWidget *tablewidget = new QTableWidget(10,5);
    tablewidget->resize(350, 200);  
//设置表头
    QStringList header;
    header<<"Month"<<"Description";
    tablewidget->setHorizontalHeaderLabels(header);
//添加内容 行和列的索引都是从0开始的
    tablewidget->setItem(0,0,new QTableWidgetItem("Jan"));
    tablewidget->setItem(1,0,new QTableWidgetItem("Feb"));
    tablewidget->setItem(2,0,new QTableWidgetItem("Mar"));
    tablewidget->setItem(0,1,new QTableWidgetItem("Jan's month"));
    tablewidget->setItem(1,1,new QTableWidgetItem("Feb's month"));
    tablewidget->setItem(2,1,new QTableWidgetItem("Mar's month"));
    tablewidget->show();
    return a.exec();
}

演示效果:

QT基础教程四--单元组件_第3张图片

单元组件和视图组件的区别

1、视图组件只能通过模型导入数据,但是单元组件除此之外还能通过添加条目逐级构建
2、视图组件可以使用自定义的数据模型,而单元组件只能使用标准的数据模型

你可能感兴趣的:(QT基础教程,qt,数据库,开发语言)