一、功能概述

说起右键菜单,之前Qt之自定义QLineEdit右键菜单这篇文章中我已经讲述过3种右键菜单的实现方式,今儿也是在啰嗦一下,针对QListWidget类在定制一下右键菜单,我使用的具体方式呢,是直接重写了contextMenuEvent方法,在这个方法中弹出右键菜单。

二、效果展示

如图1是针对QListWidget定制的右键菜单,美观程度一般,但是功能基本实现

图1 QListWidget右键菜单

三、代码讲解

右键菜单在相关文章小节中我已经给出了一些文章,关于右键菜单的弹出逻辑我就不在细说了,在这里我就简单说下右键菜单的处理代码

ListItem是定制的item项,使用setItemWidget接口设置为QStandardListWidgetItem项的窗口

1、删除,首先获取当前项,然后获取获取当前项上的窗口,并把其析构

 void DragList::DeleteSotck()
{
QListWidgetItem * item = currentItem();
if (item == nullptr)
{
return;
} if (ListItem * itemWidget = ItemWidget(item))
{
itemWidget->deleteLater();
itemWidget = nullptr;
} delete item;
item = nullptr;
}

2、置顶,这个操作需要注意,如果当前项已经是第一个,那么不需要做任何处理

 void DragList::TopSotck()
{
QListWidgetItem * item = currentItem();
if (item == nullptr)
{
return;
} if (row(item) == )
{
return;
} ListItem * itemWidget = ItemWidget(item);
QListWidgetItem * newItem = takeItem(row(item));
insertItem(, newItem);
ListItem * topWidget = new ListItem;
topWidget->SetData(itemWidget->GetData());
setItemWidget(newItem, topWidget); if (itemWidget)
{
delete itemWidget;
itemWidget = nullptr;
}
setCurrentItem(newItem);
}

3、置低,同样的道理,如果当前项是最后一个,那么也不需要做处理

 void DragList::BottomSotck()
{
QListWidgetItem * item = currentItem();
if (item == nullptr)
{
return;
} if (row(item) == count() - )
{
return;
} ListItem * itemWidget = ItemWidget(item);
QListWidgetItem * newItem = takeItem(row(item));
addItem(newItem);
ListItem * bottomWidget = new ListItem;
bottomWidget->SetData(itemWidget->GetData());
setItemWidget(newItem, bottomWidget); if (itemWidget)
{
delete itemWidget;
itemWidget = nullptr;
}
setCurrentItem(newItem);
}

4、上移一位

 void DragList::UpSotck()
{
QListWidgetItem * item = currentItem();
if (item == nullptr)
{
return;
} int itemRow = row(item);
if (itemRow == )
{
return;
} ListItem * itemWidget = ItemWidget(item);
QListWidgetItem * newItem = takeItem(row(item));
insertItem(itemRow - , newItem);
ListItem * upWidget = new ListItem;
upWidget->SetData(itemWidget->GetData());
setItemWidget(newItem, upWidget); if (itemWidget)
{
delete itemWidget;
itemWidget = nullptr;
} setCurrentItem(newItem);
}

5、下移一位

 void DragList::DownSotck()
{
QListWidgetItem * item = currentItem();
if (item == nullptr)
{
return;
} int itemRow = row(item);
if (itemRow == count() - )
{
return;
} ListItem * itemWidget = ItemWidget(item);
QListWidgetItem * newItem = takeItem(row(item));
insertItem(itemRow + , newItem);
ListItem * downWidget = new ListItem;
downWidget->SetData(itemWidget->GetData());
setItemWidget(newItem, downWidget); if (itemWidget)
{
delete itemWidget;
itemWidget = nullptr;
}
setCurrentItem(newItem);
}

四、示例代码

Qt之QAbstractItemView视图右键菜单

五、相关文章

Qt之自定义QLineEdit右键菜单

qt之菜单项定制

Qt 弹出式菜单阴影

Qt之默认菜单语言设置

如果您觉得文章不错,不妨给个打赏,写作不易,感谢各位的支持。您的支持是我最大的动力,谢谢!!! 

 

很重要--转载声明

  1. 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
  2. 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。

Qt之QAbstractItemView右键菜单的更多相关文章

  1. Qt532.【转】Qt创建鼠标右键菜单

    ZC:可以通过 设置  (QWebView*)->setContextMenuPolicy(NoContextMenu); 来关闭 QWebView的默认右键菜单 Qt创建鼠标右键菜单_疯华正茂 ...

  2. QT学习之窗口右键菜单

    #QT学习之窗口右键菜单 QWidget 及其子类都有右键菜单,主要因为其有两个与右键菜单相关联的函数: Qt::ContextMenuPolicy contextMenuPlicy() const ...

  3. qt tableview中如何添加右键菜单且不可编辑单元格

    QTableView是一个比较实用的类,下面教给大家如何在QTableView中添加右键菜单. #include <QMenu>#include <QAction> QTabl ...

  4. Qt之自定义QLineEdit右键菜单

    一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...

  5. Qt——右键菜单

    所谓“右键菜单”,我们可以这样来看:右键+菜单.所以我们可以定义一个菜单,然后重写鼠标点击事件,令菜单在鼠标右击的时候弹出来.这种方法是可以的,但是Qt提供了一种专门用于右键菜单的方法,且看下面这个属 ...

  6. Qt之密码框不可选中、复制、粘贴、无右键菜单等

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  7. Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

  8. 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  9. 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

随机推荐

  1. linux red hat 安装svn

    安装步骤如下: 1.yum install subversion   2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输入 ...

  2. 获取枚举类型的描述description

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  3. Android学习之Handler消息传递机制

    Android只允许UI线程修改Activity里的UI组件.当Android程序第一次启动时,Android会同时启动一条主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户 ...

  4. Oracle 一次生产分库,升级,迁移

    今天完成了一个负载较高的中央数据库的分库操作, 并实现了oracle的滚动升级(10.2.0.1->10.2.0.4), 业务中断仅15分钟. 平台: RHEL AS 4 + Oracle 10 ...

  5. 浅谈html5网页内嵌视频

    更好的阅读体验:浅谈html5网页内嵌视频 如今在这个特殊的时代下:flash将死未死,微软和IE的历史问题,html5标准未定,苹果和谷歌的闭源和开源之争,移动互联网的大势所趋,浏览器各自为战... ...

  6. MT写的对URL操作的两个方法

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. CSS - Select 标签在不同浏览器中的高度设置

    当使用Select标签时,在不同浏览器中显示的高度不同,如何解决此问题: 解决方法链接:http://stackoverflow.com/questions/20477823/select-html- ...

  8. Skynet Pomelo Erlang Elixir 的认识

    1.skynet pomelo(node.js) elixir(erlang) 周末研究总结 手游这两年发展来看,感觉对实时性要求越来越高,有同事在研究Elixir开发,google得知这东西是基于e ...

  9. truncate/drop表非常慢,怎么办?用硬链接,极速体验

    这个这个,我必须花巨大篇幅,记录下今天清空表记录的英雄壮举,可知道一个drop操作,执行了一下午啊一下午,这是要急出翔的节奏..呵呵,下面开始 我的需求:某表因历史原因,积压了1亿条记录,约占360G ...

  10. 谈一下OOP的乱用现象

    很久很久以前写了两篇设计模式乱用的文章,最近心血来潮,突然想写篇OOP乱用. 最近在移植一个旧项目,接手过程很多嘈想吐,开一篇谈一下OOP的乱用. 大多数公司用MVC是为了解耦合,但是这套代码的MVC ...