您现在的位置是:首页 > 正文

Qt扫盲-QListWidget理论总结

2024-04-01 00:12:24阅读 5

1. 概念

QListWidget 是一个继承自 QListView 的类,其实就是 QListView 的一个很经典的 列表 交互控件,在QListWidget 里面提供了非常方便的基于 每一个 QListWidgetItem 的 管理 类,从添加、选择、删除 列表子Item到 QListWidget 里,都是封装的非常完善的。对于 每一个列表项的样子的话,是得靠QListWidgetItem 自己设置的,比如说文字对齐啊,背景大小、图标之类的。

如果要使用更加灵活的方式的话,最好还是使用 QListView 来显示,QListWidget 也不能显示过量的数据,过量数据的时候性能很不好。也不够灵活,但是一般情况下还是够用的哈。
在这里插入图片描述

QListWidget 的构造方法是和普通控件是一样的。

QListWidget *listWidget = new QListWidget(this);

2. 添加列表项

有两种方法可以将Item添加到列表中:

  1. 可以使用QListWidget 作为其父部件来构造它们
  2. 或者可以在没有父部件的情况下构造它们并稍后添加到列表中。
    如果在构造Item时QListWidget 已存在,则第一种方法更易于使用:
new QListWidgetItem(tr(“Oak”), listWidget);
new QListWidgetItem(tr(“Fir”), listWidget);
new QListWidgetItem(tr(“Pine”), listWidget);

如果您需要将新Item插入到列表中的特定位置,则应在没有父部件的情况下构造它。然后应该使用 insertItem() 函数将其放置在列表中。QListWidget 将获得Item的所有权。

QListWidgetItem *newItem = new QListWidgetItem;
newItem->setText(itemText);
listWidget->insertItem(row, newItem);

对于多个Item,可以改用 insertItems() 。

3. 列表其他属性

QListWidget 的 selectionMode() 方法决定列表中可以同时选择多少个Item。同时 setSelectionMode() 就是来创建复杂的Item选择。

  1. 列表中的项数是使用 count() 函数确定。
  2. 要从列表中删除 Item,请使用 takeItem() 。
  3. 列表中的当前项可以使用 currentItem() 找到,并使用 setCurrentItem() 进行更改。用户还可以通过使用键盘导航或单击其他Item来更改当前Item。
  4. 是否可用排序用 isSortingEnabled() 来确定,当然可呀用 setSortingEnabled(bool enable) 同样也可以设置
  5. findItems() 来查找 满足条件的 item

4. 常用信号

信号名 含义
currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) 发生选择项切换时
currentRowChanged(int currentRow) 选择项的 选择行数改变时
currentTextChanged(const QString &currentText) 就是Item 项的文字改变,前提是 Item 可以编辑哈
itemActivated(QListWidgetItem *item) 被激活时发出信号。Item被激活当用户单击或双点击的时候, 这具体是取决于系统配置。当用户按下激活键(在Windows和X11这是返回键,在Mac OS X Command + O) 也会激活。
itemChanged(QListWidgetItem *item) 当item 的数据改变时 ,可能是 文字被编辑了,图标变了,被checkedl了
itemClicked(QListWidgetItem *item) 就是item被单击
itemDoubleClicked(QListWidgetItem *item) 就是item被双击
itemEntered(QListWidgetItem *item) 就是鼠标进入,一般不用
itemPressed(QListWidgetItem *item) 就是item被按下了
itemSelectionChanged() 就是选择项的时候发生改变了,一般会配合 selectedItems() 来获取被选择的对象。

5. 槽函数

信号名 含义
clear() 移除所有的Item
scrollToItem() 让 列表滚动到指定的 Item 项的位置,一般会和 Search 的时候 配合使用

6. QListWidgetItem 简述

QListWidgetItem 表示 QListWidget 中的单个Item。每个Item可以包含多条信息,并将适当地显示它们。

其实知道 QListWidgetItem 能显示并编辑文本、还能check 就够用了。

QListWidgetItem 通常用于显示 文本 text() 和 图标 icon () 。这些是使用 setText() 和 setIcon() 函数设置的。文本的外观可以使用 setFont() 、setForeground() 和 setBackground() 进行自定义。列表项中的文本可以使用 setTextAlignment() 函数对齐。工具提示、状态提示和“这是什么?”帮助可以添加到使用 setToolTip() 、setStatusTip() 和 setWhatsThis() 的列表项中。
默认情况下,Item是 enabled, selectable, checkable的,并且配置 成可拖放、可编辑、可点击 check 的。这都是属于Item 的标志。

每个Item的标志可以通过使用适当的值调用setFlags() 来更改(参见Qt::ItemFlags)。可以使用 setCheckState() 函数检查、取消选中和部分检查可检查的Item。相应的 checkState() 函数指示Item的当前检查状态。
常用的标志像下面

标志名 含义
Qt::NoItemFlags 完全禁用
Qt::ItemIsSelectable item可被选中
Qt::ItemIsEditable item可被编辑
Qt::ItemIsDragEnabled item可被 拖住
Qt::ItemIsDropEnabled item可被 放置
Qt::ItemIsUserCheckable item可用 check 的类似 QCheckBox
Qt::ItemIsEnabled item可用不

isHidden() 函数可用于确定Item是否隐藏。要隐藏Item,请使用 setHidden() 。

网站文章

  • audio解决不能自动播放问题

    无法实现打开网页就能自动播放音乐正常情况下使用autoplay即可实现自动播放,但是现在打开网页该参数无效。

    2024-04-01 00:12:17
  • BugKu MISC 就五层你能解开吗?

    BugKu MISC 就五层你能解开吗?

    题目名称:就五层你能解开吗BugKu。

    2024-04-01 00:11:47
  • 【CV作业03】图像平滑+锐化处理

    【CV作业03】图像平滑+锐化处理

    【代码】【CV作业03】图像平滑+锐化处理。

    2024-04-01 00:11:43
  • 使用Apache服务器部署python web过程中遇到的问题及解决方法

    使用Apache服务器部署python web过程中遇到的问题及解决方法

    1. 浏览器提示Internal Server Error 分析:查看Apache错误日志。日志提示:IndentationError: expected an indented block\r,即程...

    2024-04-01 00:11:36
  • 基于 Redis 实现分布式应用限流

    基于 Redis 实现分布式应用限流

    原文链接:http://xiaoqiangge.com/aritcle/1513004492550.html 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。 前几天在DD的公众号,看了一篇关于使用 瓜娃 实现单应用限流的方案,参考《redis in action》 实现了一个jedis版本的,都属于业务层次限制。 实际场景中

    2024-04-01 00:11:11
  • Spring Boot系列八 spring boot集成jsp、restful接口、springmvc基本功能

    本文介绍spring boot里的spring mvc部分的用法,主要包括如下:- 1 实现 spring boot 集成jsp: @Controller+ @RequestMapping- 2 模拟登录功能: ModelAndView- 3 spring boot 实现restful接口:@RestController

    2024-04-01 00:11:04
  • databinding的简单使用步骤

    1.开启databindingandroid { //在 app 的 build.grandle 中添加开启配置 dataBinding { enabled = true }}2、创建实体public class User { public String name; public User(String name) { this...

    2024-04-01 00:10:57
  • ESP32 Arduino (十) HTTPClient库

    ESP32 Arduino (十) HTTPClient库

    很多时候我们需要ESP32去访问外网的服务器获取一些网络资源,HTTP服务器是最常见的服务器,在这个时候就需要ESP32作为HTTPClient使用,HttpClient是Apache中的一个开源的项...

    2024-04-01 00:10:33
  • 打印机文件服务器主机,打印机服务器主机名称是什么原因

    打印机文件服务器主机,打印机服务器主机名称是什么原因

    打印机服务器主机名称是什么原因 内容精选换一换成为进阶Linux大佬的第一步一、操作系统1、操作系统为接口的示意图2、不同领域的主流操作系统桌面操作系统服务器操作系统嵌入式操作系统移动设备操作系统 3...

    2024-04-01 00:10:20
  • Vue组件化学习之scoped

    Vue组件化学习之scoped

    简介主要介绍scoped的作用。先弄一个案例:main.js://引入vue依赖import Vue from 'vue'//引入组件Appimport App from './App.vue'// ...

    2024-04-01 00:10:14