项目控件组(基于项)Item-Based-Qt-思维导图-学习笔记

news2024/11/25 22:56:41

项目控件组(基于项)Item-Based

在这里插入图片描述

控件组

(1)List Widget:清单控件

QListWidget

  • 控件简介

    • 继承关系:继承自 QListView

    • 功能:提供一个基于项的列表小部件,允许添加和删除项目,使用内部模型管理 QListWidgetItem

    • 特点:相比于 QListView,QListWidget 操作更为便捷,不需要用户自行建模,直接使用 addItem 添加项目

  • 用法示例

    • 示例说明

      • 创建用户界面组件

        • 使用 QListWidget 组件来显示音乐文件列表

        • 添加一个按钮用于触发文件选择操作

      • 当用户单击按钮时,程序会调用系统的文件打开窗口

      • 在打开文件选择框时,设置文件过滤器,只显示以 .mp3 结尾的文件

      • 创建示例 mp3 文件

        • 使用 touch 命令在终端创建两个示例文件:0.mp3 和 1.mp3

        • 这两个文件仅作为示例,不是实际的音乐文件

      • 当用户在文件选择框中选择这两个 mp3 文件后,程序将这些文件路径添加为 QListWidget 的项

      • 此操作是实现音乐播放器功能中的一个部分,实际应用中用户需要打开和选择音乐文件

      • 具体实现时需要编写相应的信号槽机制,连接按钮的点击事件与文件选择功能

    • 代码

      • 在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

      • mainwindow.h

        • 1 #ifndef MAINWINDOW_H
          2 #define MAINWINDOW_H
          3
          4 #include
          5 #include
          6 #include
          7
          8 class MainWindow : public QMainWindow
          9{
          10 Q_OBJECT
          11
          12 public:
          13 MainWindow(QWidget parent = nullptr);
          14 ~MainWindow();
          15
          16 private:
          17 /
          声明对象 */
          18 QListWidget *listWidget;
          19 QPushButton *pushButton;
          20
          21 private slots:
          22 void pushButtonClicked();
          23
          24 };
          25 #endif // MAINWINDOW_H
      • mainwindow.cpp

        • 1 #include “mainwindow.h”
          2 #include “QFileDialog”
          3
          4 MainWindow::MainWindow(QWidget parent)
          5 : QMainWindow(parent)
          6{
          7 /
          设置主窗口的显示位置与大小 /
          8 this->setGeometry(0, 0, 800, 480);
          9
          10 listWidget = new QListWidget(this);
          11
          12 /
          设置 listWidget 的大小 /
          13 listWidget->setGeometry(0, 0, 480, 480);
          14
          15 listWidget->addItem(“请单击右边的添加项添加内容”);
          16
          17 pushButton = new QPushButton(this);
          18
          19 /
          设置 pushButton 的位置与大小 /
          20 pushButton->setGeometry(540, 200, 200, 100);
          21 pushButton->setText(“添加项”);
          22
          23 /
          信号与槽连接 /
          24 connect(pushButton, SIGNAL(clicked()),
          25 this, SLOT(pushButtonClicked()));
          26 }
          27
          28 void MainWindow::pushButtonClicked()
          29 {
          30 /
          调用系统打开文件窗口,设置窗口标题为“打开文件”,过滤文件名 /
          31 QString fileName = QFileDialog::getOpenFileName(
          32 this,tr(“添加项”),“”,
          33 tr("Files(
          .mp3)")
          34 );
          35
          36 /* 判断是否选中打开 mp3 文件 /
          37 if (fileName != NULL)
          38 /
          添加项到列表中 */
          39 listWidget->addItem(fileName);
          40 }
          41
          42 MainWindow::~MainWindow()
          43 {
          44 }
      • main.cpp

        • 1 #include “mainwindow.h”
          2
          3 #include
          4
          5 int main(int argc, char *argv[])
          6{
          7 QApplication a(argc, argv);
          8 MainWindow w;
          9 w.show();
          10 return a.exec();
          11 }
    • 运行效果

      • 当点击添加项按钮时出现系统选择文件的对话框,系统打开文件时会过滤 mp3 后缀的文件,点击后缀为 mp3 的文件,双击或者选择后再点击右上角的“Open”的打开来把这个文件添加到左边的 QListWidget 列表中

(2)TreeWidget:树形控件

QTreeWidget

  • 控件简介

    • 继承关系:继承自 QTreeView

    • 功能:提供一个使用预定义树模型的树视图,方便管理和显示树状结构的数据

    • 特点:基于项的经典接口,每个项为 QTreeWidgetItem,不需要用户自定义模型,直接使用内置的树模型

  • 用法示例

    • 使用一个 TreeWidget,模拟成一个飞信联系人分组,通过选中组内联系人来“群发”信息

    • 思路:当选中顶层的树形节点时,子节点全部被选中;当取消选择顶层树形节点时,子节点原来选中的状态将全部取消;当不完全选中子节时,树节点显示为半选状态

    • 在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

    • mainwindow.h

      • 1 #ifndef MAINWINDOW_H
        2 #define MAINWINDOW_H
        3
        4 #include
        5 #include
        6 #include
        7
        8 class MainWindow : public QMainWindow
        9{
        10 Q_OBJECT
        11
        12 public:
        13 MainWindow(QWidget parent = nullptr);
        14 ~MainWindow();
        15
        16 private:
        17 /
        QTreeWidget 对象 */
        18 QTreeWidget treeWidget;
        19 /
        顶层树节点 */
        20 QTreeWidgetItem parentItem;
        21 /
        声明三个子节点 /
        22 QTreeWidgetItem subItem[3];
        23
        24 /
        子节点处理函数 /
        25 void updateParentItem(QTreeWidgetItem
        );
        26
        27 private slots:
        28 /
        槽函数 /
        29 void treeItemChanged(QTreeWidgetItem
        , int);
        30
        31 };
        32 #endif // MAINWINDOW_H
    • mainwindow.cpp

      • 1 #include “mainwindow.h”
        2
        3 MainWindow::MainWindow(QWidget parent)
        4 : QMainWindow(parent)
        5{
        6 /
        设置主窗体大小 /
        7 this->setGeometry(0, 0, 800, 480);
        8
        9 /
        实例化 /
        10 treeWidget = new QTreeWidget(this);
        11
        12 /
        居中 /
        13 setCentralWidget(treeWidget);
        14
        15 /
        清空列表 /
        16 treeWidget->clear();
        17
        18 /
        实例化顶层树节点 /
        19 parentItem = new QTreeWidgetItem(treeWidget);
        20 parentItem->setText(0, “同事”);
        21
        22 parentItem->setFlags(
        23 Qt::ItemIsUserCheckable
        24 | Qt::ItemIsEnabled
        25 | Qt::ItemIsSelectable
        26 );
        27 /
        树节点设置为未选中 /
        28 parentItem->setCheckState(0, Qt::Unchecked);
        29
        30 /
        字符串链表 /
        31 QList strList;
        32 strList<<“关羽”<<“刘备”<<“张飞”;
        33
        34 for (int i = 0; i < 3; i++){
        35 /
        实例化子节点 /
        36 subItem[i] = new QTreeWidgetItem(parentItem);
        37 /
        设置子节点的文本,参数 0 代表第 0 列 /
        38 subItem[i]->setText(0, strList[i]);
        39 /
        设置子节点的属性为用户可选、项开启、项可选 /
        40 subItem[i]->setFlags(
        41 Qt::ItemIsUserCheckable
        42 | Qt::ItemIsEnabled
        43 | Qt::ItemIsSelectable
        44 );
        45 /
        设置子节点的状态为未选中 /
        46 subItem[i]->setCheckState(0,Qt::Unchecked);
        47 }
        48 /
        信号槽连接 /
        49 connect(treeWidget,SIGNAL(itemChanged(QTreeWidgetItem
        , int)),
        50 this, SLOT(treeItemChanged(QTreeWidgetItem* , int)));
        51
        52 }
        53
        54 /* 更新树节点函数 /
        55 void MainWindow::updateParentItem(QTreeWidgetItem item)
        56 {
        57 /
        获取子节点的父节点(树节点) /
        58 QTreeWidgetItem
        parent = item->parent();
        59 if(parent == NULL){
        60 return;
        61 }
        62 /
        初始化选中的数目为 0,下面根据 selectCount 来判断树节点的状态 /
        63 int selectCount = 0;
        64 /
        获取树节点的子节点总数 /
        65 int childCount = parent->childCount();
        66 /
        循环判断子节点的状态 /
        67 for(int i = 0; i < childCount; i ++){
        68 QTreeWidgetItem
        childItem =parent->child(i);
        69 /* 判断当前子节点的状是否为选中状态,如果是,则加一 /
        70 if(childItem->checkState(0) == Qt::Checked) {
        71 selectCount ++;
        72 }
        73 }
        74 /
        根据 selectCount 来判断树节点的状态 /
        75 /
        当选中的子节点小于或等于 0 时,则为设置树节点为未选中状态 /
        76 if (selectCount <= 0) {
        77 /
        设置树节点为未选中状态 /
        78 parent->setCheckState(0, Qt::Unchecked);
        79 /
        部分选中时,树节点为半选状态 /
        80 } else if (selectCount > 0 && selectCount < childCount) {
        81 /
        设置为半选状态 /
        82 parent->setCheckState(0, Qt::PartiallyChecked);
        83 /
        子节点全选时 /
        84 } else if (selectCount == childCount){
        85 /
        设置为树节点为选中状态 */
        86 parent->setCheckState(0, Qt::Checked);
        87 }
        88 }
        89
        90 void MainWindow::treeItemChanged(QTreeWidgetItem item, int)
        91 {
        92 /
        获取子节点总数 /
        93 int count = item->childCount();
        94
        95 /
        若顶层树节点选中 /
        96 if(Qt::Checked == item->checkState(0) ) {
        97 /
        若选中的项是树节点,count 会大于 0,否则选中的项是子节点 /
        98 if (count > 0) {
        99 for (int i = 0; i < count; i++) {
        100 /
        子节点全选 /
        101 item->child(i)->setCheckState(0, Qt::Checked);
        102 }
        103 } else {
        104 /
        子节点处理 /
        105 updateParentItem(item);
        106 }
        107 /
        若顶层树节点取消选中时 /
        108 } else if (Qt::Unchecked == item->checkState(0)) {
        109 if (count > 0){
        110 /
        若选中的项是树节点,count 会大于 0,否则选中的项是子节点 /
        111 for (int i = 0; i < count; i++) {
        112 /
        子节点全不选 /
        113 item->child(i)->setCheckState(0, Qt::Unchecked);
        114 }
        115 } else {
        116 /
        子节点处理 */
        117 updateParentItem(item);
        118 }
        119 }
        120 }
        121
        122 MainWindow::~MainWindow()
        123 {
        124 }
    • main.cpp

      • 由新建项目时生成,无改动
  • 运行效果

    • 全选时的状态

(3)Table Widget:表控件

QTableWidget

  • 控件简介

    • 继承关系:继承自 QTableView

    • 功能:提供一个带有默认模型的基于项的表视图,用于显示和管理表格数据

    • 特点:使用 QTableWidgetItem 管理表格中的项,简化了表格数据的管理操作,用户无需自行创建模型

  • 用法示例

    • 使用一个 TableWidget,绘制一
      个表格,同时修改项的标题,在表格里可以直接通过双击进行编辑项里的内容,也可以删除项里的内容等

    • 在新建例程中不要勾选“Generate form”,默认继承 QMainWindow 类即可

    • mainwindow.h

      • 1 #ifndef MAINWINDOW_H
        2 #define MAINWINDOW_H
        3
        4 #include
        5 #include
        6
        7 class MainWindow : public QMainWindow
        8{
        9 Q_OBJECT
        10
        11 public:
        12 MainWindow(QWidget parent = nullptr);
        13 ~MainWindow();
        14
        15 private:
        16 /
        QTabelWidget 表格 */
        17 QTableWidget tableWidget;
        18
        19 /
        QTabelWidgetItem 表格数据(项) */
        20 QTableWidgetItem *tableWidgetItem[4];
        21
        22 };
        23 #endif // MAINWINDOW_H
    • mainwindow.cpp

      • 1 #include “mainwindow.h”
        2
        3 MainWindow::MainWindow(QWidget parent)
        4 : QMainWindow(parent)
        5{
        6 /
        设置主窗体的大小与位置 /
        7 this->setGeometry(0, 0, 800, 480);
        8
        9 /
        实例化 /
        10 tableWidget = new QTableWidget(this);
        11 /
        设置 tableWidget 表居中 /
        12 setCentralWidget(tableWidget);
        13 /
        设置列数 /
        14 tableWidget->setColumnCount(2);
        15 /
        设置行数 /
        16 tableWidget->setRowCount(2);
        17 /
        使用标签设置水平标题标签 /
        18 tableWidget->setHorizontalHeaderLabels(
        19 QStringList()<<“姓名”<<“性别”
        20 );
        21
        22 /
        字符串类型链表 /
        23 QList strList;
        24 strList<<“小明”<<“小红”<<“男”<<“女”;
        25
        26 for (int i = 0; i < 4; i++) {
        27 /
        实例化 /
        28 tableWidgetItem[i] = new QTableWidgetItem(strList[i]);
        29 /
        设置文本居中对齐 /
        30 tableWidgetItem[i]->setTextAlignment(Qt::AlignCenter);
        31 }
        32 /
        插入数据,表的 index 就是一个二维数组数据 */
        33 tableWidget->setItem(0, 0, tableWidgetItem[0]);
        34 tableWidget->setItem(1, 0, tableWidgetItem[1]);
        35 tableWidget->setItem(0, 1, tableWidgetItem[2]);
        36 tableWidget->setItem(1, 1, tableWidgetItem[3]);
        37
        38 }
        39
        40 MainWindow::~MainWindow()
        41 {
        42 }
    • main.cpp

      • 由新建项目时生成,无改动
  • 运行效果

    • 双击表格中的项,可修改表格的内容,同时也可以删除内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2061268.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot的启动流程原理

目录 一:入口简介: 二。创建SpringApplication对象 1.推倒出当前项目的启动类型 2.设置Initializer初始化器 3.初始化Listerner监听器 4.反推出main方法所在的class对象。 三.运行SpringApplication#run(java.lang.String...)方法 1):获取运行监听器: 2)发布启动过程中…

IPC进程通信以及网络通信

一、IPC 进程间通信方式 共享内存 //最高效的进程间通信方式 不需要把用户的东西再复制到内核 他们与内核进行绑定 共享内存&#xff1a; 1、是一块&#xff0c;内核预留的空间 2、最高效的通信方式 //避免了用户空间到内核空间的数据拷贝 IPC通信方式 ---操作流程类似的…

“决胜面试:高频题目与算法策略一览”

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

wps题注为表格或图片编号

word中为表格添加题注&#xff1a; 问题&#xff1a;多次或多人编辑导致--序号不能联动更新&#xff08;域代码不一致,如图&#xff09; 所以是否可以批量替换word里的域代码&#xff1f;如果可以这问题就解决了————失败 解决办法&#xff1a; 如图&#xff0c;复制表头&…

[数据集][目标检测]工程机械车辆检测数据集VOC+YOLO格式3189张10类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;3189 标注数量(xml文件个数)&#xff1a;3189 标注数量(txt文件个数)&#xff1a;3189 标注…

万户 ezOFFICE receivefile_gd.jsp SQL注入漏洞复现

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

Thymeleaf+Bootstrap封装分页组件

效果 代码 templates/components/pagination.html <!doctype html> <html lang"zh-CN" xmlns:th"http://www.thymeleaf.org"> <body> <div class"d-flex justify-content-between align-items-center mb-3" th:fragment&…

Neo4j 图数据库入门

图形数据库存储节点和关系&#xff0c;而不是表或文档。数据的存储方式就像你在白板上勾画想法一样。您的数据存储不受预定义模型的限制&#xff0c;允许以非常灵活的方式考虑和使用它。 一、核心概念&#xff1a;属性图形模型 Neo4j使用属性图数据库模型。图数据结构由节点(离…

React错误:无法在‘node’上执行‘insertBefore‘:要在其前插入新节点的节点不是此节点的子节点

我在NextJS中用cloudinary实现了一个上传图片的页面&#xff0c;结果图片上传之后页面就无法点击操作&#xff0c;并在控制台报错&#xff1a; Failed to execute insertBefore on Node: The node before which the new node is to be inserted is not a child of this node. …

在 Arch Linux 上安装 Linux、Apache、MySQL、PHP(LAMP)堆栈的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 LAMP LAMP 栈是一组用于启动和运行 Web 服务器的开源软件。该首字母缩略词代表 Linux、Apache、MySQL 和 PHP。Arch Linux 使用强…

【HTML】为网页添加列表和超链接

1、列表 1.1、无序列表 <ul><li>列表项1</li><li>列表项2</li><li>列表项3</li> ...... </ul>无序列表的常用type属性值 1.2、有序列表 <ol><li>列表项1</li><li>列表项2</li><li>列…

【乐吾乐大屏可视化组态编辑器】下载离线部署包

下载离线部署包/组件包 在线使用&#xff1a;https://v.le5le.com/ 导出为Zip文件 Zip包主要用于大屏可视化平台快捷导入导出项目。 如图下图所示&#xff0c;Zip包仅包含数据文件和图片文件&#xff0c;不包含js等依赖库。需要有一定开发能力者参考官方文档补充依赖库才能…

AndroidStudio最新版各个repositories下载失败

如下图&#xff0c;各个仓库都是下载失败&#xff0c;网络是有oversea的访问的&#xff0c;不行&#xff0c;我给AndroidStudio网络代理到oversea也不能下载&#xff0c;就很奇怪&#xff0c;就像是AndroidStudio强行把网络访问给墙了 原来Settings.Gradle的配置如下&#xff0…

[Algorithm][贪心][跳跃游戏][加油站][单调递增的数字][坏了的计算器]详细讲解

目录 1.跳跃游戏1.题目链接2.算法思路详解3.代码实现 2.加油站1.题目链接2.算法原理详解3.代码实现 3.单调递增的数字1.题目链接2.算法原理详解3.代码实现 4.坏了的计算器1.代码实现2.算法原理详解3.代码实现 1.跳跃游戏 1.题目链接 跳跃游戏 2.算法思路详解 贪心&#xff1…

【Python机器学习】NLP概述——词序和语法

词的顺序很重要&#xff0c;那些在词序列&#xff08;如句子&#xff09;中控制词序的规则被称为语言的语法&#xff08;也被称为文法&#xff09;。这是之前的词袋或词向量例子中所丢弃的信息。在大多数简短的短语甚至许多完整的句子中&#xff0c;上述词向量近似方法都可以奏…

数据结构——顺序栈和链式栈

目录 引言 栈的定义 栈的分类 栈的功能 栈的声明 1.顺序栈 2.链式栈 栈的功能实现 1.栈的初始化 (1)顺序栈 (2)链式栈 (3)复杂度分析 2.判断栈是否为空 (1)顺序栈 (2)链式栈 (3)复杂度分析 3.返回栈顶元素 (1)顺序栈 (2)链式栈 (3)复杂度分析 4.返回栈的大…

[数据集][目标检测]快递包裹检测数据集VOC+YOLO格式5382张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;5382 标注数量(xml文件个数)&#xff1a;5382 标注数量(txt文件个数)&#xff1a;5382 标注…

【JavaSec】JavaIO流

0x04 IO流 文章目录 0x04 IO流创建文件读取文件信息文件目录操作删除创建目录 文件流操作读文件写文件write(byte[] b) 方法write(byte[] b, int off, int len) 方法 文件拷贝 向大佬致敬&#xff1a; https://drun1baby.top 创建文件 三种方法 一张图对比着看 其实感觉差别不…

C语言函数详解(上)【库函数】

目录 前言 一、函数的概念 二、库函数 1.标准库和头文件 2.库函数使用方式 3.如何通过以上的网站查看库函数信息 &#xff08;以sqrt为例&#xff09; 3.1 功能 3.2 头文件包含 3.3 库函数文档的⼀般格式 1. 函数原型 ​编辑2. 函数功能介绍 ​编辑3. 参数和返…

vue路由导航简单实现

1.代码 安装路由模块 npm install vue-router 导入路由组件&#xff1a; import { createRouter, createWebHistory } from vue-router 首先创建三个vue组件显示路由内容&#xff1a; index.vue <template><!-- 首页跳转 --><router-link to"/my"&…