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…

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;以争取他们的业务。虽然反…

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

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

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

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

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…

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()函数…

环境配置04:Pytorch下载安装

说明&#xff1a; 显存大于4G的建议使用GPU版本的pytorch&#xff0c;低于4G建议使用CPU版本pytorch&#xff0c;直接使用命令安装对应版本即可 GPU版本的pytorch的使用需要显卡支持&#xff0c;需要先安装CUDA&#xff0c;即需要完成以下安装 1.查看已安装CUDA版本 GPU对应…

常见的结构型设计模式

设计模式&#xff08;二&#xff09; 常见的结构型模式 1.代理模式: 提供一种代理方法 &#xff0c;来控制对其他对象的访问。在有些情况下&#xff0c;一个对象不能或者不适合直接访问另一个对象&#xff0c;而代理对象可以在这两个类之间起一个中介的作用。 举例&#xf…

Docker容器基础知识,即linux日常运维命令

Docker 是一个流行的用 Go 语言开发的开源项目&#xff0c;基于Linux内核的cgroup、namespace及 AUFS 等技术&#xff0c;对进程进行封装隔离&#xff0c;由 Dotcloud 公司开发。Docker已成为容器行业的事实标准。 小陈发现一个有趣的事情&#xff0c;容器的英文是Container&am…

甘肃的千层烤馍:传统面点的魅力绽放

千层烤馍&#xff0c;作为甘肃美食文化的重要象征&#xff0c;以其独特的外形和丰富的口感&#xff0c;吸引着众多食客。它的外观犹如一件精美的艺术品&#xff0c;层层叠叠&#xff0c;金黄酥脆&#xff0c;散发着诱人的香气。 在甘肃平凉地区制作千层烤馍&#xff0c…

国内大模型/智能体盘点丨16家公司,13款大模型,19个智能体

在当今这个智能化风起云涌的时代&#xff0c;随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Language Models&#xff09;作为推动行业变革的关键力量&#xff0c;正逐步渗透到社会经济的各个角落。 从科技创新的最前沿到日常生活应用的细微之处&#xff0c…

相交链表--力扣160

相交链表 题目思路C代码 题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 求两个链表的相交结点&#xff0c;使用…

ATFX汇市:瑞士央行连续第二次降息,USDCHF猛涨

ATFX汇市&#xff1a;昨日15:30&#xff0c;瑞士央行公布利率决议结果&#xff0c;将政策利率下调0.25个百分点&#xff0c;至1.25%。瑞士央行在政策声明中提到&#xff1a;与上一季度相比&#xff0c;潜在的通胀压力再次下降&#xff1b;瑞士目前的通货膨胀主要是由国内服务价…

成都晨持绪:现在的抖音网店怎么做更快起店

在当今社交媒体的浪潮中&#xff0c;抖音已经成为一个不可忽视的电商平台。对于想要快速起步的抖音网店来说&#xff0c;掌握一些关键策略至关重要。 首要的是定位清晰。你的网店需要有一个鲜明的主题&#xff0c;这可以是某一特定领域的产品&#xff0c;如美妆、服饰或是手工艺…

【C语言】解决C语言报错:Use-After-Free

文章目录 简介什么是Use-After-FreeUse-After-Free的常见原因如何检测和调试Use-After-Free解决Use-After-Free的最佳实践详细实例解析示例1&#xff1a;释放内存后未将指针置为NULL示例2&#xff1a;多次释放同一指针示例3&#xff1a;全局或静态指针被释放后继续使用示例4&am…

力扣1793.好子数组的最大分数

力扣1793.好子数组的最大分数 对于每个数 求其左右两侧小于它高度的元素下标(单调栈) class Solution {public:int maximumScore(vector<int>& nums, int k) {int n nums.size();vector<int> left(n,-1);stack<int> st;for(int i0;i<n;i){while(!…