【嵌入式——QT】QListWidget

QListWidget类提供了一个基于项的列表小部件,QListWidgetItem是列表中的项,该篇文章中涉及到的功能有添加列表项,插入列表项,删除列表项,清空列表,向上移动列表项,向下移动列表项。

常用API

  • addItem(const QString &label):添加项;
  • addItems(const QStringList &labels):添加集合项;
  • insertItem(int row, QListWidgetItem *item):插入项;
  • currentItem() const:当前项
  • currentRow() const:当前行;
  • item(int row) const:如果列表中给定行的元素被设置,则返回对应的元素;否则返回null;
  • row(const QListWidgetItem *item) const:返回包含给定项的行;
  • count() const:反列表中项目的数量;
  • takeItem(int row):移除项;

常用信号

  • void currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous):每当当前元素发生变化时,就会发出这个信号;
  • void currentRowChanged(int currentRow):每当当前元素发生变化时,就会发出这个信号;
  • void currentTextChanged(const QString &currentText):每当当前元素发生变化时,就会发出这个信号;
  • void itemActivated(QListWidgetItem *item):当项目被激活时,这个信号就会发出。根据系统配置,当用户单击或双击该项目时,该项目将被激活;
  • void itemChanged(QListWidgetItem *item):每当item的数据发生变化时,就会发出这个信号;
  • void itemClicked(QListWidgetItem *item):当鼠标按钮单击部件中的某个项目时,该信号由指定的项目发出;
  • void itemDoubleClicked(QListWidgetItem *item):当鼠标按钮双击部件中的某个项目时,该信号由指定的项目发出;
  • void itemEntered(QListWidgetItem *item):当鼠标光标进入某个元素时,就会发出这个信号。项目就是输入的项目。这个信号只有在mouseTracking被打开,或者鼠标移动到某个元素时按下了鼠标按钮时才会发出;
  • void itemPressed(QListWidgetItem *item):当在部件中的某个项目上按下鼠标按钮时,该信号由指定的项目发出;
  • void itemSelectionChanged():每当选择发生变化时,就会发出这个信号;

图片示例
在这里插入图片描述
代码示例
QlistWidgetDialog.h

#ifndef QLISTWIDGETDIALOG_H
#define QLISTWIDGETDIALOG_H

#include <QDialog>
#include <QListWidgetItem>
namespace Ui
{
    class QlistWidgetDialog;
}

class QlistWidgetDialog : public QDialog
{
    Q_OBJECT

public:
    explicit QlistWidgetDialog(QWidget* parent = nullptr);
    ~QlistWidgetDialog();

private slots:
    void on_pushButtonAdd_clicked();

    void on_pushButtonUp_clicked();

    void on_pushButtonDown_clicked();

    void on_pushButtonRemove_clicked();

    void on_pushButtonClear_clicked();

    void on_pushButtonInsert_clicked();

    void on_listWidget_currentRowChanged(int currentRow);

    void on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous);

    void on_listWidget_currentTextChanged(const QString& currentText);

    void on_listWidget_customContextMenuRequested(const QPoint& pos);

private:
    Ui::QlistWidgetDialog* ui;


};

#endif // QLISTWIDGETDIALOG_H

QlistWidgetDialog.cpp

#include "QlistWidgetDialog.h"
#include "ui_QlistWidgetDialog.h"
#include <QListWidgetItem>>
#include <QDebug>
#include <QMenu>
QlistWidgetDialog::QlistWidgetDialog(QWidget* parent)
    : QDialog(parent)
    , ui(new Ui::QlistWidgetDialog)
{
    ui->setupUi(this);
    //listWidget属性设置为自定义菜单 才可以鼠标右键自定义右键菜单
    ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
}

QlistWidgetDialog::~QlistWidgetDialog()
{
    delete ui;
}

void QlistWidgetDialog::on_pushButtonAdd_clicked()
{
    QString text = ui->lineEdit->text();
    QListWidgetItem* item = new QListWidgetItem(text);
    // 可编辑
    item->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled);
    ui->listWidget->addItem(item);
}


void QlistWidgetDialog::on_pushButtonUp_clicked()
{
    QListWidgetItem* selectItem = ui->listWidget->currentItem();
    int curRow = ui->listWidget->row(selectItem);
    if(curRow > 0) {
        ui->listWidget->takeItem(curRow);
        ui->listWidget->insertItem(curRow - 1, selectItem);
        ui->listWidget->setCurrentItem(selectItem);
    }
}


void QlistWidgetDialog::on_pushButtonDown_clicked()
{
    QListWidgetItem* selectItem = ui->listWidget->currentItem();
    int curRow = ui->listWidget->row(selectItem);
    if(curRow < ui->listWidget->count() - 1) {
        //移除当前行号的item
        ui->listWidget->takeItem(curRow);
        //在curRow+1位置插入选中的item
        ui->listWidget->insertItem(curRow + 1, selectItem);
        //设置选中的item为当前item
        ui->listWidget->setCurrentItem(selectItem);
    }
}


void QlistWidgetDialog::on_pushButtonRemove_clicked()
{
    int row = ui->listWidget->currentRow();
    //移除项
    QListWidgetItem* dItem = ui->listWidget->takeItem(row);
    //删除对象
    delete dItem;
}



void QlistWidgetDialog::on_pushButtonClear_clicked()
{
    ui->listWidget->clear();
}


void QlistWidgetDialog::on_pushButtonInsert_clicked()
{
    QString text = ui->lineEdit->text();
    int curRow = ui->listWidget->currentRow();
    QListWidgetItem* newItem = new QListWidgetItem(text);
    ui->listWidget->insertItem(curRow, newItem);
}


void QlistWidgetDialog::on_listWidget_currentRowChanged(int currentRow)
{
    qDebug()<<"currentRow"<<currentRow;
}


void QlistWidgetDialog::on_listWidget_currentItemChanged(QListWidgetItem* current, QListWidgetItem* previous)
{
    // QString curText = current->text();
    // QString preText = previous->text();
    // qDebug()<<"curText"<<curText<<"preText"<<preText;
}


void QlistWidgetDialog::on_listWidget_currentTextChanged(const QString& currentText)
{
    qDebug()<<"currentText"<<currentText;
}

//鼠标右键
void QlistWidgetDialog::on_listWidget_customContextMenuRequested(const QPoint& pos)
{
    Q_UNUSED(pos);
    QMenu* menu = new QMenu(this);
    QAction* act1 = new  QAction("act1");
    QAction* act2 = new  QAction("act2");
    QAction* act3 = new  QAction("act3");
    QAction* act4 = new  QAction("act4");
    menu->addAction(act1);
    menu->addAction(act2);
    menu->addAction(act3);
    menu->addAction(act4);
    menu->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单
    delete menu;
}


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

操作系统x面试|进程与线程

1. 线程进程的区别 进程可以称为是资源分配的最小单元&#xff0c;而线程可以称为是处理器分配的最小单元。 资源包括内存空间。同时进程是一段代码的执行过程&#xff0c;这段代码需要多少的内存在代码确定时已经确定下来了。 处理器就是执行单元&#xff0c;一个进程可以拆解…

css实现背景渐变叠加

线性渐变效果图: .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#fff 30%),linear-gradient(to right,pink,skyblue);}径像渐变效果图&#xff1a; .box{width: 100vw;height: 100vh;background:linear-gradient(to bottom,transparent,#…

代码随想录刷题笔记-Day27

1. 全排列 46. 全排列https://leetcode.cn/problems/permutations/ 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],…

你知道什么是回调函数吗?

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

牛客禁用题:求阶乘

思路&#xff1a;在新类中使用全局变量进行运算&#xff0c;在主类中定义新类数组&#xff0c;通过构造函数的调用次数返回阶乘 #include <type_traits> class add{public:static int count;static int tmp;add(){countcounttmp;tmp;} }; int add::count0; int add::t…

MCTS代码

这段代码的背景是玩一个游戏。游戏的参数有NUM_TURNS&#xff0c;在第i回合&#xff0c;你可以从一个整数[-2,2,3&#xff0c;-3]*&#xff08;NUM_TURNS1-i&#xff09;中进行选择。例如&#xff0c;在一个4回合的游戏中&#xff0c;在第1回合&#xff0c;你可以从[-8,8,12&am…

CleanMyMac X2024一款专为Mac用户设计的优化工具

亲爱的用户们&#xff0c;我们都知道电脑在长时间使用后会变得越来越慢&#xff0c;垃圾文件和无用的应用程序会占用我们的硬盘空间&#xff0c;让我们的电脑变得像蜗牛一样慢。但是&#xff0c;现在有一个解决方案可以让你的电脑重获新生&#xff0c;那就是CleanMyMac X&#…

对于《幻兽帕鲁》这样的游戏,如何优化服务器性能以提高游戏体验?

对于《幻兽帕鲁》这样的游戏&#xff0c;如何评估和优化服务器性能以提高游戏体验&#xff1f; 硬件配置优化&#xff1a;选择高性能的服务器&#xff0c;如4核16G的幻兽帕鲁服务器&#xff0c;这样可以保证有足够的计算性能和内存容量来支持游戏的运行。同时&#xff0c;考虑到…

JAVA工程师面试专题-《消息队列》篇

​​​​​​​ 1、为什么使用消息队列&#xff1f; 解耦、异步、削峰 2、消息队列有什么优缺点 优点&#xff1a;解耦、异步、削峰 缺点&#xff1a;系统可用性降低、系统复杂度提高、一致性问题 3、如何进⾏消息队列选型&#xff1f; Kafka&#xff1a; ○ 优点&…

three.js 叉乘判断物体在人前左,前右,后左、后右

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs"></div><div style"padding: 10px;text-align: left;">叉乘判断物体…

【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

数据守护者:揭秘文件备份的重要性与实用策略

一、守护数据安全&#xff1a;文件备份的不可或缺性 在数字化时代&#xff0c;我们的工作、学习和生活都围绕着数据展开。无论是珍贵的家庭照片、重要的工作文件&#xff0c;还是个人的创意作品&#xff0c;这些数字资产都承载着我们的回忆、努力和创意。然而&#xff0c;随着…

【Qt学习】QSpinBox 与 QDateTimeEdit 控件 的介绍与实例()

文章目录 QSpinBox1.1 介绍1.2 实例使用 - &#xff08;模拟点餐-功能扩充&#xff09;1.3 资源文件 2. QDateTimeEdit2.1 介绍2.2 使用&#xff08;计算时间差值 / 间隔&#xff09;daysTo() 与 secsTo() 2.3 资源文件 QSpinBox 1.1 介绍 对于QSpinBox&#xff0c;我们可以查…

【C++】结构体内存对齐详解

规则 1.第一个成员在结构体变量偏移量为0 的地址处&#xff0c;也就是第一个成员必须从头开始。 2.其他成员的偏移量为对齐数**(该成员的大小 与 编译器默认的一个对齐数 中的较小值)**的整数倍。 3.结构体总大小对最大对齐数&#xff08;通过最大成员来确定&#xff09;的整数…

【ArcPy】游标带条件遍历

示例展示 原始数据 搜索出来的 代码 import arcpy shppath r"C:\Users\admin\Desktop\excelfile\1.shp" with arcpy.da.SearchCursor(pointshp, ["SHAPEXY","class"], """"class" 0""") as cursor:f…

html5新增标签+css3新增标签

新增标签 一.html5新增标签1.语义化标签2.多媒体标签&#xff08;1&#xff09;视频video&#xff08;2&#xff09;音频audio3.总结 3.input属性![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f0795316d5f2418fb04e43e9af3e3a27.png#pic_center)4.表单属性![在这…

外贸业务员没客户的7大原因+解决办法!

业务员没有客户&#xff0c;就是无源之水&#xff0c;无本之木&#xff0c;这自然也就没有业绩。那些吃空饷的业务员&#xff0c;迟早会拖垮公司。所以不管是什么原因导致的业务员没客户&#xff0c;都要一一查验清楚。七个业务员没有客户的原因&#xff0c;七种对策&#xff0…

UE4 Niagara 关卡3.1官方案例解析二

自己尝试做做&#xff0c;打乱顺序 1、新建空的niagara system&#xff0c;添加空的发射器。更换渲染器为网格体渲染器并添加网格体。 2、发射器更新里面添加Spawn Rate&#xff0c;发射个粒子看看 效果图&#xff1a; 3、采样静态网格体&#xff0c;网格体粒子出生于静态网格…

光谱数据处理:4.七种预处理方法及其python实现

一、前言 光谱数据预处理是光谱分析中的一个重要环节&#xff0c;它的目的是通过一系列技术改善数据质量&#xff0c;以提高后续分析的准确性和可靠性。以下是几个常见的光谱数据预处理步骤&#xff1a; 基线校正&#xff08;Baseline Correction&#xff09;&#xff1a;去除…

vue3 中 主题定制

vue3 中 主题定制 背景 做多主题定制&#xff0c;黑/白 &#xff0c;里面还要再分各种颜色&#xff0c;每次进来都要记住上次的主题设置 效果图 一、目录结构 ├── generated │ ├── theme │ │ └── dark-yellow.ts │ │ └── dark-orange.ts │ │…