如何去掉qlistwidgetitem 点击周围的白色虚框

3186人阅读
关于右键菜单的实现,可以参考另一篇我转载的文章,。
问题:如何实现在一个列表中点击右键,如果在Item上面,则有“修改”选项,在其余空白处,则只有“添加”,&删除&选项。
实现右键菜单, 从QListWidget中派生出ListWidget,重写
void QWidget::contextMenuEvent ( QContextMenuEvent * event )&& [virtual protected]
当鼠标在ListWidget中右击时,就会调用这个事件。
void ListWidget::contextMenuEvent ( QContextMenuEvent * event )
&&& QMenu* popMenu = new QMenu(this);
&&& popMenu-&addAction(new QAction(&添加&, this));
&&& popMenu-&addAction(new QAction(&删除&, this));
&&& popMenu-&addAction(new QAction(&修改&, this));
&&& popMenu-&exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
在程序中使用ListWidget,当鼠标在之上右击时, 就会出现如上代码中的菜单,但是无论右击何处,都会相出现相同的选项。显然,在空白处的右键菜单上面不应该出现&修改&选项,不然修改的是那一个???
问题的关键就是判定调用右键菜单时,鼠标右击的位置处是不是一个Item。那么实现的代码应该是这样的:
void ListWidget::contextMenuEvent ( QContextMenuEvent * event )
&&& QMenu* popMenu = new QMenu(this);
&&& popMenu-&addAction(new QAction(&添加&, this));
&&& popMenu-&addAction(new QAction(&删除&, this));
&&& if(currentMousePosHasAItem())
&&& &&& popMenu-&addAction(new QAction(&修改&, this));
&&& popMenu-&exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
如何才能判定鼠标右击时,是否是在一个Item上面呢?可爱的Qt很容易实现。
QListWidgetItem * QListWidget::itemAt ( const QPoint & p ) const
Returns a pointer to the item at the coordinates p.
QListWidgetItem * QListWidget::itemAt ( int x, int y ) const
This is an overloaded member function, provided for convenience.
Returns a pointer to the item at the coordinates (x, y).
以上两个重载的函数,就是如何利用坐标位置获取item,如何返回的NULL, 那么就没有Item。
void ListWidget::contextMenuEvent ( QContextMenuEvent * event )
&&& QMenu* popMenu = new QMenu(this);
&&& popMenu-&addAction(new QAction(&添加&, this));
&&& popMenu-&addAction(new QAction(&删除&, this));
&&& if(this-&itemAt(QCursor::pos()) != NULL) //如果有item则添加&修改&菜单 [1]*
&&& &&& popMenu-&addAction(new QAction(&修改&, this));
&&& popMenu-&exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
写好上面的代码,咦?还是不行?呵呵,我这里也不行。因为itemAt()中接受的坐标是ListWidget坐标系的。而通过QCursor::pos()获得坐标是全局坐标。需要映射到ListWidget上才可以,Qt Assist中是这样描述的。
QPoint QCursor::pos ()&& [static]
Returns the position of the cursor (hot spot) in global screen coordinates.
You can call QWidget::mapFromGlobal() to translate it to widget coordinates.
See also setPos(), QWidget::mapFromGlobal(), and QWidget::mapToGlobal().
所以最终的代码是:
void ListWidget::contextMenuEvent ( QContextMenuEvent * event )
&&& QMenu* popMenu = new QMenu(this);
&&& popMenu-&addAction(new QAction(&添加&, this));
&&& popMenu-&addAction(new QAction(&删除&, this));
&&& if(this-&itemAt(mapFromGlobal(QCursor::pos())) != NULL) //如果有item则添加&修改&菜单 [1]*
&&& &&& popMenu-&addAction(new QAction(&修改&, this));
&&& popMenu-&exec(QCursor::pos()); // 菜单出现的位置为当前鼠标的位置
OK, 功能实现。记得在自己的代码总要把QAction连接到处理的slot上。上面的代码菜单是没有功能的。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:232660次
积分:3004
积分:3004
排名:第6921名
原创:54篇
转载:97篇
评论:104条
(1)(1)(3)(2)(14)(6)(5)(2)(2)(15)(3)(15)(37)(2)(12)(8)(1)(2)(10)(10)qlistwidget选中
从QListWidget中删除选中的QListWidgetItem
QList&QListWidgetItem*& list = ListWidget-&selectedItems();
if(list.size() == 0)
QListWidgetItem* sel = list[0];
int r = ListWidget-&row(sel);
ListWidget-&takeItem(r);
使用迭代器好像无法实现.由于容器在循环中动态变化,使用下面这种循环 while(ui-&lwg_Source-&selectedItems().size()&0) { QListWidgetItem* sel = ui-&lwg_Source-&selectedItems().at(0); if (sel) { int r = ui-&lwg_Source-&row(sel); sel = ui-&lwg_Source-&takeItem(r); ui
void MainWindow::on_action_Del_triggered() { QList&QListWidgetItem*& selectedItems = ui-&listWidget-&selectedItems(); if (selectedItems.count() & 0) { if (QMessageBox::Yes == QLibX::QMessageBoxEx::GetInstance()-&question(this,&删除确认&
今天学习了下Pyqt的 QListWidget 控件
我们先看下这个图片 这张图片就是典型的listWidget效果,我们今天就仿这样布局新建个ListWidget 在网上找了个关于QListWidget的基础关系图: 官网对QListWidget的描述: The QListWidget class provides an item-based list widget. QL ...
类 QListWidget 在其内部定义了一个具有列表结构的模型,并以列表形式显示其中的数据项.列表中的每个数据项被表示为类 QListWidgetItem 的一个对象.在列表视图中所要显示的数据被存放在每个数据项的角色 DisplayRole 对应的数据子项中.这个数据子项的类型为 QVariant ,其中可以存放类型为 QString 的字符串,也可以存放类型为 int 或 ...
在使用 QTableView 或 QTableWidget 时,有时我们不想要选中虚框,可以实现一个 ItemDelegate ,重写 drawFocus() 和 drawCheck()
两个虚函数,然后调用 QAbstractItemView 的 setItemDelegate() 把自定义的 itemDelegate 对象传递给 QTableView 即可.需要注意的是,QAbstractItemView 不会删除你设置给它的 ItemDelegate ,需要开发者自己在合适的时候
我有一个特殊效果要求实现(其实很弱智,也变成特殊效果,汗一下自己):两个QRadioButton切换的时候,让旁边的QListWidget自动变化不同的背景色.想了很多办法: 1. 控件自己刷新,不行 list_widget-&update(); list_widget-&repaint(); QCoreApplication::processEvents(); // 加上这句也不行 2. 试图使用QListView的dataChanged(),可这是个保护函数,由于QListWidget封装
虽然特别简单,但是对于小白来说,还是有必要过一下脑子和眼睛,当然还得过手(江湖传言:眼过千变,不如手过一遍),所以记录在此: #include &tablewidgetxxx.h& #include &QtGui/QApplication& #include &QtGui/QListWidget& #include &QtGui/QSplitter& int main(int argc, char *argv[]) { QApplication ap
已经很久没有写Blog.最近在研究Qt,正好刚刚完成了一个封装了QListWidget的小自定义Widget,中间学习到的一些东西就放在这里分享,这里面复杂(至少对于我这样的初学者很复杂)的迭代器.指针操作,往往让人晕头转向. 我是在ArchLinu x86_64的机器上完成相关代码的,Qt的版本是4.8.0.根据Qt文档,要想从一个QListWidget中获取选中的Item,需要使用selectedItems()成员函数,它的定义如下: QList&QListWidgetItem *& se
大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个功能突然失效了.真是让人恼火,这让我调起代码来特别别扭,对于这种情况绝对不能将就,必须速速地解决,问题的所在最终找到了,而且解决起来很容易,还有多种方法,下面我们一起看看:第一种: ...
图片选中出现边框效果: 当点击选中图片时,图片能够出现红色的边框效果. 代码实例如下: &!DOCTYPE html& &html& &head& &meta charset=&utf-8&& &meta name=&author& content=&/& /& &title&蚂蚁部落&/title& &style
源代码地址:/EizoiOS/ImagePickerClass 效果图如下:
在单元格上增加一张图片,此处的实例是把背景阴影也一起做为一张图片,平时可以通过一个VIEW来设置它的透明度:还要单元格给它赋于相应的点击事件:
1:此为单元格视图,用于处理选中的效果
EizoAsset : ...
最近在工作中经常遇到了一个问题就是把把文件夹中的图片全部以缩略图的形式显示出来,刚开始的时候一头雾水,不知道怎么办,经过在网上查资料,发现QListWidget控件可以实现图片的缩略图显示,但是不知道怎么利用这个控件实现这个功能,网上有很多例子,但是在windows系统上用Qt编译这些程序以后却得不到理想的效果,虽然也可以让这些图片以缩略图的形式显示,但是都必须把这些图片做成资源文件,这和平时的开发中把很多即时的图片以缩略图的形式显示完全不同.所以找了好几天资料,最终解决了这个问题,下面是实现缩
如何判断HTML中的单选多选是否选中呢?
这是web编程中最常用的判断,可是前段时间,却遇到了一个很奇怪的问题. 我想很多人会这样判断 if($(&#weixuanzhong&).attr(&checked&)==&checked&)//选中时 { } 但如果是如下的HTML代码: &input type=&checkbox& checked=&checked& value=&male
作为一名菜鸟,关于spanner获取选中的内容文字代码,网上后很多 但是根据给出的位置来自动选择对象,这个代码一直没找到 后来找人问了问,才知道就一句话的事,特意在这里记录下 array.xml &?xml version=&1.0& encoding=&utf-8&?& &resources& &string-array name=&elementsArray&& &item&金&/item
&td&航空公司: &select name=&airCom& id=&topAirComId&& &%-- &option value=&${priceInfo.airCom }&&${priceInfo.airCom }&/option& --%& &script type=&text/javascript&&CreateAirComSelectOpt
QListWidget 可以设置模型setViewMode
当setViewMode值为QListView.IconMode 表示Icon模式 以下代码来自Pyqt Example 1 #!/usr/bin/env python 2 # -*- coding: UTF8 -*- 3 from PyQt4 import QtCore, QtGui 4 import conf ...
&input type=&radio&
name=&test&/& &input type=&radio&
name=&test& id
= &input2&/& (说明:使用的jquery 版本是 1.10.2.) 使用 jquery 的removeAttr(),清除掉 radio 的checked属性后.使用 attr('checked',true)可以给对应的radio
CSS禁止鼠标拖动选择文字,禁用页面内容选中和操作,只需在body的样式中加入如下代码就可以了
body{ -moz-user-select: -webkit-user-select: -ms-user-select: -khtml-user-select: user-select: }
EasyUI DataGrid在多选时,选中某行,可以取消:而在单选时,并不能取消选中某一行. 可以通过修改源码来完成. 在其源码中找到 opts.singleSelect==true 将代码做如下修改(参考版本是jQuery EasyUI 1.4.1) 修改前: _5df(_5da,_5db); 修改后 if(tr.hasClass(&datagrid-row-selected&)){ _5e0(_5da,_5db); }else{ _5df(_5da,_5db); } 注意:不同版
Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功 ...
C:\Windows\System32\drivers\etc
SSO:单点登录 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath(&/&) .即Tomc ...
1 项目的特点 独特性 临时性 但创造的成果一般和其特点相反. 2 什么是项目管理? 什么 ...
转载请注明出处:http://blog.csdn.net/guolin_blog/arti ...
先对svn(subversion)做个简单的介绍: 运行方式 独立服务器(例如:svn:///xxx): 借助apache (例如:/xxx): 数据存储 svn存储 ...
1.安装jdk版本1.8 2.配置环境变量 D:\Program Files\Java\jdk1.8.0_11 (如果从jdk7更改为jdk8,修改JAVA_HOME变量就可以了.)JAVA_HOME: D:\Pro ...
create-table-stmt: column-def: type-name: col ...
转载地址:/zb-xxzjjcbx/archive//2845641.html 最近在搞UI部分,对布局有了一定的认识(仅限于各人的理解)欢迎来拍砖.
1.为产品订立优先级和先后次序. 2.不强迫用户.不为1%的需求骚扰99%的用户. 3.研发机制保证,产品迭代要快,快速实现.快速响应. 4.图案和简洁并不是一对矛盾体. 5.要丰富自己的角色,做最挑剔的用户.笨用户 ...
拓扑图: 配置参数: R2: ip nat pool 1 10.1.2.2 10.1.2. ...1103人阅读
当按钮或者QtTableWidget的row拥有焦点的时候,会有一个矩形点阵虚框。这在一个方形按钮上,倒不大引人注意。但是一个圆形按钮上,却显著起来。
下面是这个方法的代码。直接使用就可以了:
#include &qproxystyle&
class MyProxyStyle : public QProxyStyle
virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option,
QPainter * painter, const QWidget * widget = 0) const
if (PE_FrameFocusRect == element)
/// do not draw focus rectangle
QProxyStyle::drawPrimitive(element, option,painter, widget);
int main(int argc, char *argv[])
QApplication a(argc, argv);
qApp-&setStyle(new MyProxyStyle);//添加style为这个工程
return a.exec();
&/qproxystyle&
使用方法:在main函数里的return exec()之前添加这么一句:qApp-&setStyle(new MyProxyStyle);
virtualvoiddrawPrimitive(PrimitiveElementelement,constQStyleOption*
option,QPainter*
painter,constQWidget
<span style="color:#)const
在 drawPrimitive里面 element这个参数就是我们需要重绘的部件,例如 我们要重新绘制QToolButton,则
switch(element) &{ &case&PE_PanelButtonTool: &&&&&&&//具体绘制 &default: &&&&&&&//调用基类的处理方法 &&&&&&&QCleanLooksStyle::drawPrimitive(element,&option,&painter,&widget); &}&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:389202次
积分:6357
积分:6357
排名:第2105名
原创:250篇
转载:226篇
评论:47条
(4)(3)(1)(1)(1)(2)(8)(17)(19)(7)(9)(12)(2)(18)(18)(8)(5)(3)(3)(4)(2)(1)(6)(9)(13)(6)(24)(26)(5)(3)(2)(13)(3)(5)(24)(28)(36)(2)(3)(3)(15)(5)(4)(9)(6)(1)(1)(2)(4)(60)(6)如何在QListWidgetItem中添加按钮?
[问题点数:90分,结帖人coderlaw]
如何在QListWidgetItem中添加按钮?
[问题点数:90分,结帖人coderlaw]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年10月 移动平台大版内专家分月排行榜第三2012年2月 移动平台大版内专家分月排行榜第三
2012年10月 移动平台大版内专家分月排行榜第三2012年2月 移动平台大版内专家分月排行榜第三
2012年10月 移动平台大版内专家分月排行榜第三2012年2月 移动平台大版内专家分月排行榜第三
2012年9月 移动平台大版内专家分月排行榜第二
2012年11月 移动平台大版内专家分月排行榜第三
2012年10月 移动平台大版内专家分月排行榜第三2012年2月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。3dmax模型白色虚框是怎么去掉?
3dmax模型白色虚框是怎么去掉?
10-03-08 &匿名提问
点击快捷键&J&或&K&就可以去掉了---------好模型&,请访问‘爱模网’!
请登录后再发表评论!

我要回帖

更多关于 qlistwidgetitem用法 的文章

 

随机推荐