QListWidget、QMenu、Action、customContextMenuRequested

news2024/11/25 0:25:23

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_OBJECT

private:
    void setActionsForButton();//为工具button关联到action
    void createSelectionMenu();//创建下拉菜单
    void setItem(QListWidgetItem *item, bool editEnable);//设置一个item
    QIcon 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 关联action
    ui->tBtnSelectItem->setPopupMode(QToolButton::MenuButtonPopup);
    // ui->tBtnSelectItem->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    ui->tBtnSelectItem->setDefaultAction(ui->actSelPopMenu);
    ui->tBtnSelectItem->setMenu(menuSelection);

    //工具栏 toolBar新建一个ToolBatton 然后关联menu 关联action
    QToolButton *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);
    else
        item->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);
        else
            item->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());
        }
        else
            str=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.coloradmin.cn/o/1847047.html

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

相关文章

S32K3 工具篇1:新手如何安装S32DS RTD4_0_0

S32K3 工具篇1&#xff1a;新手如何安装S32DS RTD4_0_0 一&#xff0c; 软件下载1.1 RTD 下载1.2 S32DS IDE 和 更新包 下载1.3 S32K3XX development 包下载 二&#xff0c; 软件安装2.1 安装S32DS IDE2.2 安装 IDE update&#xff0c;development&#xff0c;RTD 三&#xff0…

Python 修炼|人人编程手册|001 计算思维

在微信中阅读,关注公众号:CodeFit。 > 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注,为我的 持续创作 提供 动力! 1. 计算思维 在我们正式开启 Python 修炼之旅前,先来了解一个关键的概念 —— 计算思维。 计算思维,其核心本质在于 抽象 …

python eval 函数和 json 对象的使用

注意&#xff1a; 1、python 不支持 switch 语句&#xff0c;所以多个条件判断分支的写法只能用 if 2、elif 对应 Java 中的 else if 3、python 编写的程序代码都是自上而下执行&#xff0c;除非代码控制&#xff0c;不然不会改变 4、需要注意代码层级&#xff0c;如果层级不对…

Mentor Xpedition怎么切换中英文界面

1、Mentor Xpedition的Layout界面&#xff0c;切换中英文的方法如下图&#xff1b; 切换英文设置&#xff0c;设置系统环境变量&#xff1a;MGC_PCB_LANGUAGEEnglish&#xff0c;重新打开软件即可切换成中文界面&#xff1b; 如果想要在切换成中文&#xff0c;把标量值改为Chi…

七连发吴谨言专访揭秘

七连发&#xff01;吴谨言专访揭秘&#xff0c;薛芳菲魅力再升级在娱乐圈的繁星中&#xff0c;总有那么一些独特的光芒&#xff0c;她们用才华和魅力照亮前行的道路。近日&#xff0c;备受瞩目的“六公主”平台连续发布了七条关于吴谨言的专访&#xff0c;引发了广大网友的热烈…

Java——访问修饰符

一、访问修饰符是什么 Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员&#xff08;字段&#xff09;的可见性和访问级别。 Java提供了四种访问修饰符&#xff1a; 访问修饰符同一类内同一包内不同包的子类不同包的非子类适用对象public可见可见可见可见类、…

猫头虎分享:IPython的使用技巧整理

&#x1f42f; 猫头虎分享&#xff1a;IPython的使用技巧整理 关于猫头虎 大家好&#xff0c;我是猫头虎&#xff0c;别名猫头虎博主&#xff0c;擅长的技术领域包括云原生、前端、后端、运维和AI。我的博客主要分享技术教程、bug解决思路、开发工具教程、前沿科技资讯、产品…

Pytorch Geometric(PyG)入门

PyG (PyTorch Geometric) 是建立在 PyTorch 基础上的一个库&#xff0c;用于轻松编写和训练图形神经网络 (GNN)&#xff0c;适用于与结构化数据相关的各种应用。官方文档 Install PyG PyG适用于python3.8-3.12 一般使用场景&#xff1a;pip install torch_geometric 或conda …

ERP系统品牌大比拼:哪款产品更适合您的企业?

ERP集成了企业的销售、采购、生产、财务等各个环节&#xff0c;实现了资源的优化配置和信息的实时共享。然而&#xff0c;面对市场上琳琅满目的ERP系统产品&#xff0c;许多企业却陷入了选择的困境。 “哪款ERP系统更适合我的企业呢&#xff1f;”这或许是每一位企业决策者心中…

对象reids

对象 redis并没有直接使用之前学的数据结构来实现键值对数据库&#xff0c;而是基于这些数据结构创建了一个对象系统 这个对象系统包含了字符串对象、列表对象、哈希对象、集合对象、有序集合对象这五种&#xff0c;每个对象都用到了至少一种之前的数据结构 redis可以在执行命…

变电站智能巡检机器人解决方案

我国拥有庞大的电网体系&#xff0c;变电站数量众多&#xff0c;且近年来快速增长。然而目前我国变电站巡检方式仍以人工为主&#xff0c;存在效率低下、监控不全面等问题。变电站通常是一个封闭的系统空间&#xff0c;设备种类繁多、占地面积广阔&#xff0c;这对巡检人员实时…

【变量与常量】

1.基本程序 容器用来存放物品 声明变量 num 是个用来装整数的变量 &#xff01; 一 个整数变量需要 4 个 byte 存储&#xff0c; 计算机 在内存里为你分配了 4 个 byte 。int num;在代码中&#xff0c;声明一个变量。 常用变量类型 存储不同类型的数据需要声明不同类型的变…

PyTorch+CNN进行猫狗识别项目

任务介绍 数据结构为&#xff1a; big_data ├── train │ └── cat │ └── XXX.jpg&#xff08;每个文件夹含若干张图像&#xff09; │ └── dog │ └── XXX.jpg&#xff08;每个文件夹含若干张图像&#xff09; ├─…

守护清远采矿安全:可燃气体报警器检定工作的必要性与实施

清远市地处广东省北部&#xff0c;矿产资源丰富&#xff0c;包括金属矿产、非金属矿产等多种类型。采矿行业作为清远的重要产业之一&#xff0c;对当地经济发展起到了积极的推动作用。 然而&#xff0c;随着采矿业的快速发展&#xff0c;安全问题也逐渐凸显出来&#xff0c;尤…

基于PaddleDetection的电路板瑕疵检测

文章目录 1. 数据集与框架介绍2. 任务详情3. Cascade R-CNN简介4. 数据分析各类别样本的数量真实框的宽高比真实框在原图的大小比例 5. 相关配置数据增强数据集路径和评估指标学习率和优化器配置预训练CascadeRCNN 的配置日志记录 6. 训练预测7. 参考链接 1. 数据集与框架介绍 …

【Sa-Token|3】Sa-Token集成到现有微服务详细介绍

一、系统架构调整 用户中心&#xff1a;保持现有的用户登录、注册接口不变。多个项目&#xff1a;前后端分离&#xff0c;保持现有逻辑不变。网关服务&#xff1a;新增或配置网关服务&#xff0c;处理所有请求并进行 Token 校验和转发。统一 Token 管理&#xff1a;通过 Sa-Tok…

VC++学习(5)——文本编程,插入符的初始化,图形插入符;文字始终在窗口;字符输入功能,回车换行,删除,左键定位;字体修改,字体平滑变色

目录 引出第五讲 文本编程新建项目输入线的初始化根据字体大小定义插入符大小创建图形插入符文字始终保存在窗口中CString类通过字符串资源 路径层字符输入的功能键盘输入消息鼠标左键消息保存点击位置的坐标 输入回车键的处理删除文字的实现 字符输入功能代码字体的修改模拟卡…

js如何使得四舍五入的百分比之和为100%

在JavaScript中&#xff0c;如果你想要确保一组四舍五入后的百分比之和严格等于100%&#xff0c;那么你不能直接对每个百分比进行四舍五入&#xff0c;因为四舍五入会引入误差。但是&#xff0c;你可以采用一种策略&#xff0c;即先对所有的百分比进行常规的四舍五入&#xff0…

ffmpeg音视频开发从入门到精通——ffmpeg下载编译与安装

音视频领域学习ffmpeg的重要性 音视频领域中ffmpeg的广泛应用&#xff0c;包括直播、短视频、网络视频、实时互动和视频监控等领域。掌握FM和音视频技术可以获得更好的薪酬。 学习建议音视频学习建议与实战应用 音视频处理机制的学习&#xff0c;需要勤加练习&#xff0c;带…

WIFI7技术之超强MLO (Multi-Link Operation)技术

随着科技的飞速发展&#xff0c;无线网络已成为我们日常生活中不可或缺的一部分。从最初的WIFI71到现在的WIFI7&#xff0c;无线网络技术不断突破&#xff0c;为用户提供更快、更稳定的网络体验。本文将探讨下WIFI7的MLO&#xff08;Multi-Link Operation&#xff0c;多链路操作…