Qt之QAbstractItemView右键菜单
一、功能概述
说起右键菜单,之前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);
}
四、示例代码
五、相关文章
![]() |
![]() |
很重要--转载声明
- 本站文章无特别说明,皆为原创,版权所有,转载时请用链接的方式,给出原文出处。同时写上原作者:朝十晚八 or Twowords
- 如要转载,请原文转载,如在转载时修改本文,请事先告知,谢绝在转载时通过修改本文达到有利于转载者的目的。
Qt之QAbstractItemView右键菜单的更多相关文章
- Qt532.【转】Qt创建鼠标右键菜单
ZC:可以通过 设置 (QWebView*)->setContextMenuPolicy(NoContextMenu); 来关闭 QWebView的默认右键菜单 Qt创建鼠标右键菜单_疯华正茂 ...
- QT学习之窗口右键菜单
#QT学习之窗口右键菜单 QWidget 及其子类都有右键菜单,主要因为其有两个与右键菜单相关联的函数: Qt::ContextMenuPolicy contextMenuPlicy() const ...
- qt tableview中如何添加右键菜单且不可编辑单元格
QTableView是一个比较实用的类,下面教给大家如何在QTableView中添加右键菜单. #include <QMenu>#include <QAction> QTabl ...
- Qt之自定义QLineEdit右键菜单
一.QLineEdit说明 QLineEdit是单行文本框,不同于QTextEdit,他只能显示一行文本,通常可以用作用户名.密码和搜索框等.它还提供了一些列的信号和槽,方便我们使用,有兴趣的小伙伴可 ...
- Qt——右键菜单
所谓“右键菜单”,我们可以这样来看:右键+菜单.所以我们可以定义一个菜单,然后重写鼠标点击事件,令菜单在鼠标右击的时候弹出来.这种方法是可以的,但是Qt提供了一种专门用于右键菜单的方法,且看下面这个属 ...
- Qt之密码框不可选中、复制、粘贴、无右键菜单等
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
- Qt之国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
- 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
- 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
随机推荐
- Hadoop学习篇1 快速入门
Hadoop是Apache Lucene创始人Doug Cutting创建的,Hadoop起源于Apache Nutch,一个开源的网络搜索引擎.最先引起注意是2003年google的一篇论文,该论文 ...
- 注入器和发布库--AngularJS学习笔记(三)
AngularJS的一大特性就是Module的加载和依赖注入,本文将分析一下loader.js和最后这些代码文件是怎么组织和运行的. Loader.js 该文件中只有setupModuleLoader ...
- HTTP - GET和POST的区别
网上有很多文章介绍这两种HTTP请求的区别,我也不懂,主要还是看了一些文章,在这里写下一些笔记. 语义不同 在HTTP协议中,最初规定GET是用来查询或者获取资料,只读,POST用于修改数据,可写.因 ...
- T 泛型转换
T为左值 result = (T)Convert.ChangeType(o,typeof(T));
- 菜鸟教程之工具使用(十)——用BlazeMeter录制JMeter测试脚本
工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...
- windows 应用商店应用笔记
xaml http://www.cnblogs.com/free722/archive/2011/11/06/2238073.html win8 http://blog.csdn.net/ygzk12 ...
- Oracle存储过程,以逗号分隔字符串传参的处理
Oracle存储过程,经常会遇见传入的参数是逗号分隔. 处理需要3步: 第一步,创建Type类型 第二部,创建函数 第三部,创建存储过程 代码如下: 第一步: create or replace ty ...
- POJ1226:Substrings(后缀数组)
Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...
- Swift 关键字汇总
常见的关键字有以下4种 与声明有关的关键字:class.deinit.enum.extension.func.import.init.let.protocol.static.struct.subscr ...
- 画蛇添足-记spring3 hibernate4整合时遇到问题的处理办法
最近在来到一个新公司,使用新的spring3,hibernate4框架,在使用注解事务总是不起作用. 首先看配置文件,然后再讲解. 首先是springmvc-servlet.xml,这个配置文件是se ...