Qt 5.14.2 学习记录 —— 십사 多元素控件

server/2025/1/24 14:04:29/

文章目录

  • 1、QListWidget
  • 2、QTableWidget
  • 3、QTreeWidget


多元素控件主要分为3个部分,QList,QTable,QTree。

每个部分都有View和Widget,W基于V封装而来。软件开发中MVC架构三个字母分别代表model数据,view视图,controller控制器(数据和视图之间的业务流程)。View只负责视图,而Widget基于View,也实现了M和C,提供了方便使用的API。

这几个Widget在运行时写入的数据都在内存中,并不保存。可以保存到一个文件中,运行时读取文件即可。

1、QListWidget

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

insert中row参数表示新的元素插入到第几行。

信号

在这里插入图片描述

写一个程序,放一个List Widget到界面中。控件中Item Views和Item Widgets,放其中一个到界面后,右击该控件,变型为其它控件。右侧再放一个Line Edit,其下面放两个Push Button。两个按钮的名字改为pushButton_insert和pushButton_delete。

在这里插入图片描述

QListWidget控件直接添加内容的方法是右键编辑项目,选择+,然后写入内容。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->listWidget->addItem("C++");ui->listWidget->addItem("Python");ui->listWidget->addItem(new QListWidgetItem("C"));
}void Widget::on_pushButton_insert_clicked()
{const QString& text = ui->lineEdit->text();ui->listWidget->addItem(text);
}void Widget::on_pushButton_delete_clicked()
{// 获取被选中的元素int row = ui->listWidget->currentRow();if (row < 0) return ;ui->listWidget->takeItem(row);
}// 头文件添加#include <QListWidgetItem>
// 感知变化的槽函数
void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{if (current != nullptr)qDebug() << "当前选中的元素: " << current->text();if (previous != nullptr)qDebug() << "上次选中的元素: " << previous->text();
}

2、QTableWidget

QTableWidget核心方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QTableWidgetItem信号

在这里插入图片描述

方法

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在界面右键tableWidget直接编辑

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码编辑

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->tableWidget->insertRow(0);ui->tableWidget->insertRow(1);ui->tableWidget->insertRow(2);ui->tableWidget->insertColumn(0);ui->tableWidget->insertColumn(1);ui->tableWidget->insertColumn(2);ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("学号"));ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("年龄"));ui->tableWidget->setItem(0, 0, new QTableWidgetItem("101"));ui->tableWidget->setItem(0, 1, new QTableWidgetItem("张三"));ui->tableWidget->setItem(0, 2, new QTableWidgetItem("22"));
}

按钮槽函数

void Widget::on_pushButton_insertRow_clicked()
{int rowCount = ui->tableWidget->rowCount();ui->tableWidget->insertRow(rowCount);
}void Widget::on_pushButton_deleteRow_clicked()
{int curRow = ui->tableWidget->currentRow();ui->tableWidget->removeRow(curRow);
}void Widget::on_pushButton_insertColumn_clicked()
{int colCount = ui->tableWidget->columnCount();ui->tableWidget->insertColumn(colCount);const QString& text = ui->lineEdit->text();ui->tableWidget->setHorizontalHeaderItem(colCount, new QTableWidgetItem(text));
}void Widget::on_pushButton_deleteColumn_clicked()
{int curColumn = ui->tableWidget->currentColumn();ui->tableWidget->removeColumn(curColumn);
}

3、QTreeWidget

QTreeWidget方法

在这里插入图片描述在这里插入图片描述

QTree这个树形结构是从根节点的下一层开始计算的,这一层成为TopLevelItem。顶层的节点也类似于List的结构。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QTreeWidgetItem

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

parent()则是获取该元素的父节点。

在这里插入图片描述

可以在界面中右键编辑项目,添加项目,子项目来建立树。

代码编辑

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 添加顶层节点ui->treeWidget->setHeaderLabel("动物");QTreeWidgetItem* item1 = new QTreeWidgetItem();item1->setText(0, "猫"); // 设一列ui->treeWidget->addTopLevelItem(item1);// 添加子节点QTreeWidgetItem* item3 = new QTreeWidgetItem();item3->setText(0, "蓝猫");item1->addChild(item3);// 添加顶层节点QTreeWidgetItem* item2 = new QTreeWidgetItem();item2->setText(0, "狗"); // 设一列ui->treeWidget->addTopLevelItem(item2);// 添加子节点QTreeWidgetItem* item4 = new QTreeWidgetItem();item4->setText(0, "中华田园犬");item2->addChild(item4);
}

按钮槽函数

void Widget::on_pushButton_insertTop_clicked()
{const QString& text = ui->lineEdit->text();QTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);ui->treeWidget->addTopLevelItem(item);
}void Widget::on_pushButton_insertItem_clicked()
{// 获取当前选中的节点QTreeWidgetItem* curItem = ui->treeWidget->currentItem();if (curItem == nullptr) return ;const QString& text = ui->lineEdit->text();QTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);// 插入到选中节点的子节点中curItem->addChild(item);
}void Widget::on_pushButton_deleteItem_clicked()
{QTreeWidgetItem* curItem = ui->treeWidget->currentItem();if (curItem == nullptr) return ;QTreeWidgetItem* parent = curItem->parent();if (parent == nullptr){// 获取在顶层中的位置int index = ui->treeWidget->indexOfTopLevelItem(curItem);ui->treeWidget->takeTopLevelItem(index);}else parent->removeChild(curItem);
}

结束。


http://www.ppmy.cn/server/161034.html

相关文章

CentOS 7.9(linux) 设置 MySQL 8.0.30 开机启动详解

文章目录 一、运行级别简介二、MySQL 服务安装与运行验证三、通过 chkconfig 配置开机启动四、验证开机启动配置五、总结 一、运行级别简介 运行级别&#xff08;Runlevel&#xff09;定义了系统的运行模式&#xff0c;常见的运行级别如下&#xff1a; 运行级别描述0关机模式…

体育实时数据是怎么获取的

体育实时数据的获取通常依赖于技术、数据提供商以及基础设施的综合应用。以下是主要的获取方式和技术手段&#xff1a; 1. 官方渠道数据接口 体育联赛与赛事方的API&#xff1a;一些官方机构&#xff08;如FIFA、NBA、MLB等&#xff09;提供实时数据接口&#xff0c;这些接口…

vscode下poetry管理项目的debug配置

点击debug选项的设置按钮&#xff0c;vscode会让我们编辑launch.json文件 {"version": "0.2.0","configurations": [{"name": "Python 调试程序: 当前文件","type": "debugpy","request": &…

数据结构与算法再探(六)动态规划

目录 动态规划 (Dynamic Programming, DP) 动态规划的基本思想 动态规划的核心概念 动态规划的实现步骤 动态规划实例 1、爬楼梯 c 递归&#xff08;超时&#xff09;需要使用记忆化递归 循环 2、打家劫舍 3、最小路径和 4、完全平方数 5、最长公共子序列 6、0-1背…

Linux内核中的InfiniBand核心驱动:verbs.c分析

InfiniBand(IB)是一种高性能、低延迟的网络互连技术,广泛应用于高性能计算(HPC)、数据中心和云计算等领域。Linux内核中的InfiniBand子系统通过提供一组核心API(称为Verbs API)来支持InfiniBand设备的操作。drivers/infiniband/core/verbs.c是InfiniBand核心驱动的重要组…

WebSocket异步导出

WebSocket异步导出 1、安装sockjs-client和stompjs2、连接后台3、vite.config.ts 配置反向代理4、导出并实时通信5、 封装WebSocket 文件注册登录(城通网盘) 1、安装sockjs-client和stompjs import SockJS from sockjs-client/dist/sockjs.min.js import Stomp from stompjs2、…

【PyCharm】连接Jupyter Notebook

【PyCharm】相关链接 【PyCharm】连接 Git【PyCharm】连接Jupyter Notebook【PyCharm】快捷键使用【PyCharm】远程连接Linux服务器【PyCharm】设置为中文界面 【PyCharm】连接Jupyter Notebook PyCharm连接Jupyter Notebook的过程可以根据不同的需求分为 本地连接 和 远程连…

leetcode_3092. 最高频率的 ID

https://leetcode.cn/problems/most-frequent-ids/description/ 看到这个数据范围 最极端情况 如果nums全为一个数 并且数量取到最大 那么范围是10的10次方 需要longlong储存 这题主要运用了哈希表配合multiset实现 哈希表主要用作存储某个数的出现次数 mst则用于记录出现次…