QListWidget、QMenu、Action、customContextMenuRequested

QListWidget的初始化、清空、Append添加、Insert添加、删除item

QListWidget的事件的使用

QToolBox的使用,每个Page可以添加其他控件

QToolBar使用代码添加QMenu,QMenu添加3个Action

QToolButton绑定Action

布局

其中 QSplitter比较特殊, 允许在水平或垂直方向上分割窗口中的多个子部件或控件。

添加方法,选中ToolBox和groupbox两个控件后, 右键布局→在水平方向上分割

.h

 

#ifndef LISTWIDGETEXAMPLE_H
#define LISTWIDGETEXAMPLE_H#include <QMainWindow>
#include <QListWidgetItem>namespace Ui {
class ListWidgetExample;
}class ListWidgetExample : public QMainWindow
{Q_OBJECTprivate:void setActionsForButton();//为工具button关联到actionvoid createSelectionMenu();//创建下拉菜单void setItem(QListWidgetItem *item, bool editEnable);//设置一个itemQIcon getIcon();public:explicit ListWidgetExample(QWidget *parent = nullptr);~ListWidgetExample();private slots:void on_actListClear_triggered();void on_actListIni_triggered();void on_chkBoxListEditable_clicked(bool checked);void on_actListAppend_triggered();void on_actListDelete_triggered();void on_actListInsert_triggered();void on_actSelectAll_triggered();void on_actSelectNone_triggered();void on_actSelectInvert_triggered();void on_btnAsc_clicked();void on_btnDec_clicked();void on_chkAllowSort_clicked(bool checked);void on_listWidget_currentRowChanged(int currentRow);void on_listWidget_currentTextChanged(const QString &currentText);void on_listWidget_itemChanged(QListWidgetItem *item);void on_listWidget_itemEntered(QListWidgetItem *item);void on_listWidget_itemPressed(QListWidgetItem *item);void on_listWidget_itemDoubleClicked(QListWidgetItem *item);void on_btnClearText_clicked();void on_btnAddEmptyRow_clicked();void on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);void on_listWidget_customContextMenuRequested(const QPoint &pos);private:Ui::ListWidgetExample *ui;
};#endif // LISTWIDGETEXAMPLE_H

.cpp

 

#include "listwidgetexample.h"
#include "ui_listwidgetexample.h"//将 toolButton 关联到 相应的action
void ListWidgetExample::setActionsForButton()
{ui->tBtnListIni->setDefaultAction(ui->actListIni);ui->tBtnListClear->setDefaultAction(ui->actListClear);ui->tBtnListAppend->setDefaultAction(ui->actListAppend);ui->tBtnListInsert->setDefaultAction(ui->actListInsert);ui->tBtnListDelete->setDefaultAction(ui->actListDelete);ui->tBtnSelAll->setDefaultAction(ui->actSelectAll);ui->tBtnSelNone->setDefaultAction(ui->actSelectNone);ui->tBtnSelnvert->setDefaultAction(ui->actSelectInvert);
}
//在toolBar中创建一个下拉菜单
void ListWidgetExample::createSelectionMenu()
{//创建下拉菜单 加入全选、空选、反选QMenu *menuSelection = new QMenu(this);menuSelection->addAction(ui->actSelectAll);menuSelection->addAction(ui->actSelectNone);menuSelection->addAction(ui->actSelectInvert);//在listWidget的tBtnSelection 关联menu 关联actionui->tBtnSelectItem->setPopupMode(QToolButton::MenuButtonPopup);// ui->tBtnSelectItem->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);ui->tBtnSelectItem->setDefaultAction(ui->actSelPopMenu);ui->tBtnSelectItem->setMenu(menuSelection);//工具栏 toolBar新建一个ToolBatton 然后关联menu 关联actionQToolButton *btn = new QToolButton(this);btn->setPopupMode(QToolButton::InstantPopup);btn->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);btn->setMenu(menuSelection);btn->setText("选择");QIcon icon;icon.addFile("://images/icon.bmp");btn->setIcon(icon);ui->toolBar->addWidget(btn);//最后在工具栏toolBar增加一个分隔符,然后加入退出ui->toolBar->addSeparator();ui->toolBar->addAction(ui->actQuit);}ListWidgetExample::ListWidgetExample(QWidget *parent): QMainWindow(parent), ui(new Ui::ListWidgetExample)
{ui->setupUi(this);setCentralWidget(ui->splitter); //设置中心组件ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);//不设置这句,无法弹出自定义菜单this->setActionsForButton();this->createSelectionMenu();
}ListWidgetExample::~ListWidgetExample()
{delete ui;
}void ListWidgetExample::on_actListClear_triggered()
{ui->listWidget->clear();
}
//设置item的flag属性
void ListWidgetExample::setItem(QListWidgetItem *item, bool editEnable)
{if(editEnable)item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsUserCheckable|Qt::ItemIsEditable);elseitem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled|Qt::ItemIsUserCheckable);
}//初始化列表数据
void ListWidgetExample::on_actListIni_triggered()
{ui->listWidget->clear();bool chk= ui->chkBoxListEditable->isChecked();QIcon icon;icon.addFile(":/toolbar/toolbarimages/724.bmp");QListWidgetItem *item ;for(int i=0;i<10;i++){QString str=QString("Item %1").arg(i);item= new QListWidgetItem();item->setText(str);item->setIcon(icon);item->setCheckState(Qt::Checked);this->setItem(item,chk);ui->listWidget->addItem(item);}
}//点击勾选框,遍历listWidget里面的item,设置 是否可编辑。
void ListWidgetExample::on_chkBoxListEditable_clicked(bool checked)
{int count = ui->listWidget->count();QListWidgetItem *item;for(int i=0;i<count;i++){item = ui->listWidget->item(i);this->setItem(item,checked);}
}QIcon ListWidgetExample::getIcon()
{QIcon icon;icon.addFile(":/toolbar/toolbarimages/724.bmp");return icon;
}void ListWidgetExample::on_actListAppend_triggered()
{QListWidgetItem *item = new QListWidgetItem("Added Item");item->setIcon(this->getIcon());item->setCheckState(Qt::Checked);this->setItem(item,ui->chkBoxListEditable->isChecked());ui->listWidget->addItem(item);
}void ListWidgetExample::on_actListInsert_triggered()
{QListWidgetItem *item = new QListWidgetItem("Inserted Item");item->setIcon(this->getIcon());item->setCheckState(Qt::Checked);this->setItem(item,ui->chkBoxListEditable->isChecked());ui->listWidget->insertItem(ui->listWidget->currentRow(),item);
}void ListWidgetExample::on_actListDelete_triggered()
{int row = ui->listWidget->currentRow();QListWidgetItem *item = ui->listWidget->takeItem(row);delete item;//需要手工删除对象
}void ListWidgetExample::on_actSelectAll_triggered()
{for(int i=0;i<ui->listWidget->count();i++){QListWidgetItem *item = ui->listWidget->item(i);item->setCheckState(Qt::Checked);//设置为选中}
}void ListWidgetExample::on_actSelectNone_triggered()
{for(int i=0;i<ui->listWidget->count();i++){QListWidgetItem *item = ui->listWidget->item(i);item->setCheckState(Qt::Unchecked);//设置为不选中}
}//反选
void ListWidgetExample::on_actSelectInvert_triggered()
{for(int i=0;i<ui->listWidget->count();i++){QListWidgetItem *item = ui->listWidget->item(i);if(item->checkState()!= Qt::Checked)item->setCheckState(Qt::Checked);elseitem->setCheckState(Qt::Unchecked);//设置为不选中}
}void ListWidgetExample::on_btnAsc_clicked()
{ui->listWidget->sortItems(Qt::AscendingOrder);
}void ListWidgetExample::on_btnDec_clicked()
{ui->listWidget->sortItems(Qt::DescendingOrder);
}void ListWidgetExample::on_chkAllowSort_clicked(bool checked)
{ui->listWidget->setSortingEnabled(checked);
}void ListWidgetExample::on_listWidget_currentRowChanged(int currentRow)
{ui->plainTextEdit->appendPlainText(QString("currentRowChanged,currentRow=%1").arg(currentRow));
}void ListWidgetExample::on_listWidget_currentTextChanged(const QString &currentText)
{ui->plainTextEdit->appendPlainText(QString("currentTextChanged,currentText=%1").arg(currentText));
}void ListWidgetExample::on_listWidget_itemChanged(QListWidgetItem *item)
{ui->plainTextEdit->appendPlainText(QString("itemChanged,itemText=%1").arg(item->text()));
}void ListWidgetExample::on_listWidget_itemEntered(QListWidgetItem *item)
{ui->plainTextEdit->appendPlainText(QString("itemEntered,itemText=%1").arg(item->text()));
}void ListWidgetExample::on_listWidget_itemPressed(QListWidgetItem *item)
{ui->plainTextEdit->appendPlainText(QString("itemPressed,itemText=%1").arg(item->text()));
}void ListWidgetExample::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{ui->plainTextEdit->appendPlainText(QString("itemDoubleClicked,itemText=%1").arg(item->text()));
}void ListWidgetExample::on_btnClearText_clicked()
{ui->plainTextEdit->clear();
}void ListWidgetExample::on_btnAddEmptyRow_clicked()
{ui->plainTextEdit->appendPlainText("");
}void ListWidgetExample::on_listWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{QString str;if(current!=NULL){if(previous!=NULL){str=QString("前项:%1 当前:%2").arg(previous->text()).arg(current->text());}elsestr=QString("当前:%2").arg(current->text());ui->editCutItemText->setText(str);}ui->plainTextEdit->appendPlainText(QString("currentItemChanged触发"));
}//自定义右键
void ListWidgetExample::on_listWidget_customContextMenuRequested(const QPoint &pos)
{ui->plainTextEdit->appendPlainText("customContextMenuRequested---开始");Q_UNUSED(pos);QMenu *menu= new QMenu(this);menu->addAction(ui->actListIni);menu->addAction(ui->actListClear);menu->addAction(ui->actListAppend);menu->addAction(ui->actListDelete);menu->addAction(ui->actListInsert);menu->addSeparator();menu->addAction(ui->actSelectAll);menu->addAction(ui->actSelectNone);menu->addAction(ui->actSelectInvert);menu->exec(QCursor::pos());//在光标处显示快捷菜单delete menu;  //菜单显示完,需要删除对象ui->plainTextEdit->appendPlainText("customContextMenuRequested---结束");}

效果

 

 

 

疑问

setSortingEnabled之后,仍然可以ui->listWidget->sortItems(Qt::AscendingOrder);

后面再看什么问题

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

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

相关文章

实现锚点链接点击tab跳转到指定位置 并且滚动鼠标顶部锚点的样式也跟随变化

实现效果如下 不管是点击还是 滚动鼠标 顶部的样式也会跟随变化 点击会跳转到指定的位置 通过IntersectionObserver 监听是否可见 下面代码可以直接执行到vue的文件 <template><div><ul class"nav"><li v-for"tab in tabs" :key…

【MYSQL】解决数据库Too many connections

Linux登录mysql mysql -u root -p 查看 mysql 服务器中的活动进程数量 mysql> select count(*) from information_schema.processlist;---------- | count(*) | ---------- | 296 | ---------- 1 row in set (0.00 sec)查看 mysql 数据库中当前活动连接的客户端 IP 地址…

Nvidia Isaac Sim组装机器人和添加传感器 入门教程 2024(5)

Nvidia Isaac Sim 入门教程 2024 版权信息 Copyright 2023-2024 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. …

采购管理系统:反向竞价失败的 6 个常见原因

在当今快节奏和竞争激烈的商业环境中&#xff0c;采购专业人员一直在寻找创新战略来节约成本和简化供应链流程。反向竞价就是其中一种广受欢迎的策略。 反向竞价提供了一种独特的采购方法&#xff0c;允许买家邀请多个供应商参与实时竞标&#xff0c;以争取他们的业务。虽然反…

[Linux内核驱动]模块的加载和卸载

Linux内核模块的加载和卸载 最简单的内核模块&#xff0c;包括内核模块的加载和卸载。 更多详细内容可以查看我的github 运行 make // 加载 insmod hello.ko // 卸载 rmmod hello模块加载函数 Linux内核模块加载函数一般以 __init 标识声明&#xff0c;然后用 module_init(函…

构建个人文件上传服务:Python Flask实现上传和下载完整指南

介绍 在本教程中&#xff0c;我们将学习如何使用Python Flask框架将文件上传到服务器&#xff0c;并使用SQLite数据库来跟踪上传的文件。我们将提供后端代码和一个示例项目的Git链接&#xff0c;以便您可以轻松地跟随本教程。 准备工作 首先&#xff0c;您需要安装Python和F…

太爱这种数据可视化效果,零售行业的都看过来

在当今数字化浪潮下&#xff0c;数据可视化已成为零售行业洞察市场趋势、优化运营决策的关键技术。奥威BI零售数据分析方案凭借其卓越的数据可视化效果&#xff0c;成为零售企业的得力助手。接下来就通过BI节假日分析报表来简单地感受一下。 注&#xff1a;该BI节假日分析报表…

网络安全突发事件应急预案

1.总则 1.1 编制目的 建立健全网络安全突发事件应急组织体系和工作机制&#xff0c;提高网络安全突发事件综合应对能力&#xff0c;确保及时有效地控制、减轻和消除网络安全突发事件造成的社会危害和损失&#xff0c;保证持续稳定运行和数据安全。 1.2 编制依据 …

新版本vue-cli打包之后没有css文件

新版本vue-cli打包之后没有css文件 vueCli配置文档 将css.extract 设置为 true就可以了 module.exports {css: {extract: true} }

chromadb

https://www.trychroma.com/ https://docs.trychroma.com/getting-started chroma 向量数据库使用教程 ChromaDB python 使用教程及记录 向量数据库检索原理 向量数据库FAISS/Chromadb/ES/milvus简单概述

adb指令切换cpu工作状态至性能模式

adb 指令 adb root adb wait-for-device adb remount adb wait-for-device adb shell "setprop persist.sys.enable.hypnus 0" adb shell "rmmod hypnus" adb shell "cat /sys/devices/system/cpu/cpu*/online" adb shell stop mpdecision adb …

oracle-定时器(job)

--1分钟运行一次定时任务。sysdate为了定时任务即可生效。 DECLARE JOB NUMBER; BEGIN DBMS_JOB.SUBMIT(JOB,P_HJZ_HJZ_PJ_DDYTKAPB_INIT_JOB;,SYSDATE,sysdate1/24/60); COMMIT; END; / select * from user_jobs; --删除 begin DBMS_JOB.broken (462, false); DBM…

java读取大文件报错

报错如下&#xff1a; java.io.IOException: Zip bomb detected! The file would exceed the max. ratio of compressed file size to the size of the expanded data. This may indicate that the file is used to inflate memory usage and thus could pose a security risk…

DDMA信号处理以及数据处理的流程---cfar检测

Hello,大家好,我是Xiaojie,好久不见,欢迎大家能够和Xiaojie一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章—DDMA信号处理以及数据处理的流程,本系列文章将从目标生成、信号仿真、测距、测速、cfar检测、测角、目标聚类、目标跟踪这几个模块逐步介绍,这个系列的…

Nacos安装教程(很细很简单),解决启动报错Please set the JAVA_HOME

nacos安装 找到你要下载的版本解压到任意非中文目录下端口默认8848&#xff0c;如有端口冲突&#xff0c;可修改配置文件中的端口。编辑shutdown.cmd文件&#xff0c;路径换成你的jdk安装地址否则会报错Please set the JAVA_HOME variable in your environment, We need java(x…

安卓应用开发——Android Studio中通过id进行约束布局

在Android开发中&#xff0c;布局通常使用XML文件来描述&#xff0c;而约束&#xff08;如相对位置、大小等&#xff09;可以通过多种方式实现&#xff0c;但直接使用ID进行约束并不直接对应于Android的传统布局系统&#xff08;如LinearLayout、RelativeLayout等&#xff09;。…

Manim本地安装

目录 背景Manim安装及配置一个上手例子参考文献 背景 通过上一期的介绍&#xff0c;我们对Manim有了初步的认识也知道Manim版本的区别&#xff0c;这一期&#xff0c;我们来给自己的计算机安装一个社区版ManimCE&#xff0c;方便以后玩Manim。笔者的硬件配置是联想笔记本Windo…

机器学习:人工智能的子领域之一

引言 人工智能&#xff08;AI&#xff09;已经成为现代科技的重要组成部分&#xff0c;推动了许多领域的创新与进步。在人工智能的诸多子领域中&#xff0c;机器学习&#xff08;ML&#xff09;无疑是最关键和最具影响力的一个。机器学习通过自动分析和学习数据中的模式&#x…

JavaScript的学习之强制类型转换

目录 一、什么是强制类型转换 二、其他类型转化为String类型 方式一&#xff1a;调用被转化数据类型的toString()方法 方式二&#xff1a;调用String函数&#xff0c;并将我们要转换的数据添加进去为参数 三、其他类型转化为Number类型 方式一&#xff1a;使用Number()函数…

web前端JS高阶面试题

问题2: 循环引用会出错 / export function deepClone1(target) { return JSON.parse(JSON.stringify(target)) } / 获取数据的类型字符串名 / function getType(data) { return Object.prototype.toString.call(data).slice(8, -1) } / 2). 面试基础版本 解决问题1: 函数属性还…