一、功能概述

说起右键菜单,之前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. 结合Domino打造全功能的Grid

    1.       需求说明: 在domino开发中我们经常会遇到表单上需要一个类似table的组件,你可以增删改等.比如我有一个张报核单据,上面需要详细列出每项金额的明细,我们先看完成后的效果: 上面 ...

  2. Scala access modifiers and qualifiers in detail

    来自:http://www.jesperdj.com/2016/01/08/scala-access-modifiers-and-qualifiers-in-detail/ Just like Jav ...

  3. Discuz! 的编码规范

    http://open.discuz.net/?ac=document&page=dev_coderule 前言 本规范由编程原则组成,融合并提炼了开发人员长时间积累下来的成熟经验,意在帮助形 ...

  4. Rxlifecycle(一):使用

    Rxlifecycle使用非常方便简单,如下: 1.集成 build.gradle添加 //Rxlifecycle compile 'com.trello:rxlifecycle:0.3.1' com ...

  5. 804 pretest 解题

    Answers with Explanations 1. c) s1 and s2 not equal s1 and s3 equal JVM sets a constant pool in whic ...

  6. gtest 安装

    1.下载,https://code.google.com/p/googletest/.解压,进入该目录,按REAME说明 安装:1.5之前 make install可以安装,1.6之后不可以...安装 ...

  7. dbvis MySQL server version for the right syntax to use near 'OPTION SQL_SELECT_LIMIT=DEFAULT' at line 1

    转自:http://www.cnblogs.com/_popc/p/4053593.html 今天使用数据库查询工具DBvis链接mysql数据库时, 发现执行如何sql语句, 都报如下错误: 后来想 ...

  8. Text3d

    有小bug,先弄这么多吧,晚了,碎觉了 ---------------------------------

  9. 用qt代码怎样编写图片保存格式[qt4.6]

    用qt代码怎样编写图片保存格式 qt提供了多个保存图片的接口,比较常用的接口如下 bool QPixmap::save ( const QString & fileName, const ch ...

  10. python 大数据分析

    #coding:utf-8 ''' @author solq by 2016-01-06 main(目录,正则过滤文件名) 执行完最后打印结果 ''' import json import fnmat ...