去掉view项的焦点虚线框的方法memo
创始人
2024-07-20 18:11:08
0

【51CTO编者按】我们曾经介绍过如何定义Android View类,Qt中的View类,如QListView, 在其项被选中时会有一个焦点虚线框表示焦点的位置。 不知道为啥,这个焦点虚线框很不招人待见, 笔者至今已经遇到多例想要去掉该虚线框的问题。

笔者能想到的有两个方法, memo如下:

使用QItemDelegate子类

对QItemDelegate这个类笔者在此不多做讨论, 详情参考Qt文档。 简单来说,这个类可以控制view中的项的绘制方式,其中包括焦点虚线框的绘制。 而且焦点虚线框的绘制被封装在一个虚函数中, 所以通过派生QItemDelegate就可以重新定义该函数的功能 — 如什么都不画。 具体对应的虚函数是:http://qt.nokia.com/doc/4.6/qitemdelegate.html#drawFocus

有了QItemDelegate的子类后,我们需要调用QAbstractItemView的setItemDelegate方法将我们的item delegate与view关联。 这个itemdelegate可以为view全局有效,或针对某个item, 也可以调用setItemDelegateForRow/Column设置针对行或列有效的delegate。

使用QStyle子类

这个方法的作用原理和第一种方法基本一致, 因为QItemDelegate的drawFocus函数调用QStyle的drawPrimitive虚函数去做实际的绘制, 所以如果我们重新定义这个绘制过程能达到同样的效果。 drawPrimitive函数负责绘制非常基本的界面元素, 根据传入的参数判断需要绘制的元素, 具体到本例就是要针对PE_FrameFocusRect元素做特殊处理。 例子代码如下:

  1. class NoFocusRectangleStyle: public QCommonStyle  
  2. {  
  3. public:  
  4. ...  
  5. void NoFocusRectangleStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,  
  6. QPainter *painter, const QWidget *widget) const  
  7. {  
  8. if (QStyle::PE_FrameFocusRect == element && widget && widget->inherits("QListWidget"))  
  9. return;  
  10. else  
  11. QCommonStyle::drawPrimitive(element, option, painter,  
  12. widget);  
  13. }  
  14. };  
  15.  

一般我们派生QStyle不会傻乎乎地去派生这个基本的基类, 更常见的是派生与我们需要的风格最接近的类,一般是我们的程序默认使用的类。 我们的派生类可能非常简单, 只重写drawPrimitive这么一个函数, 几行代码搞定。 使用方法是调用QApplication::setStyle, 或者QWidget::setStyle, 前者将style效果应用到程序中的所有窗体,后者将效果限制在当前窗体。

小小memo, 希望对广大Qter有所帮助。 如果大家有其他方法欢迎留言。

【编辑推荐】

  1. Qt程序进入等待睡眠的正确方法
  2. Qt开发:释放线程中创建的QUdpSocket对象
  3. QTreeWidget设计解决没有拖动项问题
  4. 在QT SDK下构建MeeGo Touch开发环境
  5. QtCreator:MeeGo开发程序入门手册

原文地址:http://www.cuteqt.com/blog/?p=2008

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...