当前位置: 首页 > news >正文

QT-常用控件(多元素控件)

目录

前言

QListWidget(纵向列表)

QTableWidget(表格)

QTreeWidget


前言

QListWidget--------->列表

QListView

QTableWidget-------->表格

QTableView

QTreeWidget---------->树状结构

QTreeView

widget与view的区别在于,view是更加底层的,而widget是基于view进行封装实现的。

  1. MVC 是软件开发中经典的软件结构组织形式,包含:

    • M model 数据
    • V view 视图 (界面)
    • C controller 控制器,处理数据和视图之间的业务流程
  2. xxView 仅负责实现视图,不处理数据存储表示和数据视图交互

  3. 使用 xxView 需要程序员自己实现 model 和 controller 部分,比较麻烦

  4. xxWidget 基于 xxView,同时实现了 model 和 controller,提供了方便的 API,使用简单

QListWidget(纵向列表)

核心方法:

样例:

#include "widget.h"
#include "ui_widget.h"
#include<QDebug>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->listWidget->addItem("C++");ui->listWidget->addItem("Java");ui->listWidget->addItem("Python");
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{QString text=ui->lineEdit->text();if(text!=nullptr)ui->listWidget->addItem(text);
}void Widget::on_pushButton_2_clicked(bool checked)
{int row=ui->listWidget->currentRow();if(row<0)return;ui->listWidget->takeItem(row);
}void Widget::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{if(current!=nullptr)qDebug()<<"cur"<<current->text();if(previous!=nullptr)qDebug()<<"pre"<<previous->text();
}

样例

QTableWidget(表格)

表格每一行是一个QTableWidget Item对象

表格的创建操作:

ui->setupUi(this);// 创建 3 行
ui->tableWidget->insertRow(0);
ui->tableWidget->insertRow(1);
ui->tableWidget->insertRow(2);// 创建 3 个列
ui->tableWidget->insertColumn(0);
ui->tableWidget->insertColumn(1);
ui->tableWidget->insertColumn(2);// 给 3 个列设定列名(设置水平方向的表头)
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("1001"));
ui->tableWidget->setItem(0, 1, new QTableWidgetItem("张三"));
ui->tableWidget->setItem(0, 2, new QTableWidgetItem("20"));ui->tableWidget->setItem(1, 0, new QTableWidgetItem("1002"));
ui->tableWidget->setItem(1, 1, new QTableWidgetItem("李四"));
ui->tableWidget->setItem(1, 2, new QTableWidgetItem("19"));ui->tableWidget->setItem(2, 0, new QTableWidgetItem("1003"));
ui->tableWidget->setItem(2, 1, new QTableWidgetItem("王五"));
ui->tableWidget->setItem(2, 2, new QTableWidgetItem("23"));

通过按钮进行行的增删

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 curCol = ui->tableWidget->currentColumn();// 删除这一列ui->tableWidget->removeColumn(curCol);
}

QTreeWidget

使用 `QTreeWidget` 表示一个树形控件。里面的每个元素,都是一个 `QTreeWidgetItem`,每个 `QTreeWidgetItem` 可以包含多个文本和图标,每个文本/图标为一个列。 可以给 `QTreeWidget` 设置顶层节点(顶层节点可以有多个),然后再给顶层节点添加子节点,从而构成树形结构。

顶层节点的添加

ui->setupUi(this);
// 设置根节点的名字
ui->treeWidget->setHeaderLabel("动物");// 新增顶层节点
QTreeWidgetItem* item1 = new QTreeWidgetItem();
// 每个节点都可以设置多个列。此处为了简单就只设置一列了。
item1->setText(0, "猫");
// 添加到顶层节点中。
ui->treeWidget->addTopLevelItem(item1);// 新增顶层节点
QTreeWidgetItem* item2 = new QTreeWidgetItem();
// 每个节点都可以设置多个列。此处为了简单就只设置一列了。
item2->setText(0, "狗");
// 添加到顶层节点中。
ui->treeWidget->addTopLevelItem(item2);// 新增顶层节点
QTreeWidgetItem* item3 = new QTreeWidgetItem();
// 每个节点都可以设置多个列。此处为了简单就只设置一列了。
item3->setText(0, "鸟");
// 添加到顶层节点中。
ui->treeWidget->addTopLevelItem(item3);

子节点的添加

// 添加一些子节点
QTreeWidgetItem* item4 = new QTreeWidgetItem();
item4->setText(0, "中华田园猫");
item1->addChild(item4);QTreeWidgetItem* item5 = new QTreeWidgetItem();
item5->setText(0, "布偶猫");
item1->addChild(item5);QTreeWidgetItem* item6 = new QTreeWidgetItem();
item6->setText(0, "暹罗猫");
item1->addChild(item6);

通过按钮实现节点的添加

void Widget::on_pushButton_insertItem_clicked()
{// 获取到当前选中的节点QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if (currentItem == nullptr) {return;}// 获取到输入框的内容const QString& text = ui->lineEdit->text();// 构造一个 QTreeWidgetItemQTreeWidgetItem* item = new QTreeWidgetItem();item->setText(0, text);// 插入到选中节点的子节点中currentItem->addChild(item);
}

通过按钮实现节点的删除

void Widget::on_pushButton_deleteItem_clicked()
{// 获取到选中的元素QTreeWidgetItem* currentItem = ui->treeWidget->currentItem();if (currentItem == nullptr) {return;}// 删除选中的元素,需要先获取到父元素,通过父元素进行删除QTreeWidgetItem* parent = currentItem->parent();if (parent == nullptr) {// 顶层元素int index = ui->treeWidget->indexOfTopLevelItem(currentItem);ui->treeWidget->takeTopLevelItem(index);} else {// 普通元素parent->removeChild(currentItem);}
}

http://www.dtcms.com/a/495075.html

相关文章:

  • MFC + OpenCV 图像预览显示不全中断问题解决:GDI行填充详解
  • 家庭农场做网站网站排名做不上去
  • LWIP通讯之PHY芯片LAN8720引脚详解
  • YOLOv3 :目标检测的经典融合与创新
  • 数值计算-线性方程组的迭代解法
  • win设置
  • 基于波动率自适应的ETF动态止盈止损模型构建与优化
  • C++ 继承笔记
  • H20裸金属租赁:捷智算安全隔离,独立配置保障数据安全
  • 装饰公司怎么做网站建设asp网站视频教程
  • 商业综合体 BAS 楼宇自控系统 + 能效管理系统:双系统协同打造高效低碳运营标杆
  • sm2025 模拟赛22 (2025.10.17)
  • 矢量图形AI 2025软件百度网盘下载与安装步骤分享
  • 建筑公司网站作用支付商城网站制作
  • 多模态文档理解视觉token剪枝思路
  • 本文讲解什么是PD诱骗协议以及如何避免充电器功率不足导致充电器不充电问题
  • 洛谷 - 线段树详解 1 (超详细版)
  • uni-app 入门学习教程,从入门到精通,uni-app基础扩展 —— 详细知识点与案例(3)
  • 解决uniapp中showLoading与showToast相互覆盖问题
  • 网站建设的外国文献三星网上商城怎么取消订单
  • 电子商务网站的建设内容家庭装什么宽带最划算
  • 轮廓系数(一个异型簇的分类标准)
  • 把 1688 商品详情搬进 MySQL:PHP 爬虫全链路实战(2025 版)
  • python+uniapp基于微信小程序的个人物品租售系统
  • 中国(新疆)航空航天国防展--三款MEMS惯性导航系统解析
  • 十大拿货网站爱做奈官方网站
  • 图像处理之膨胀
  • AI部署001 - C++环境部署与服务器使用
  • MP4格式视频无法播放怎么修?4个修复方法,解决难题
  • 语音处理:音频移形幻影,为何大振幅信号也无声