Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2646823
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2009-09-04 19:28:44

    最近在做QT项目中,测试提了一个关于QTreeView的BUG:选中某条记录时,在TreeView中空白处(暂且叫A点)点击右键弹出菜单,菜单中的某些选项不对,原因是点击右键A点时,没有让选中状态为非选中状态(windows的操作行为是这样的)
 
    开始的思路是:点击处的位置能知道,然后得到当前所有记录的占用的Rect大小,就能确定A点是非位于Rect内,但在确定Rect的大小不是件容易的事,主要是高度问题
总高 = 记录数*每行高度;
或首行左上角到未行右下角

在测试上面的过程中,发现文档中的indexAt ( const QPoint & ) const : QModelIndex能很好解决这样问题,不用去计算A点是否在Rect内,只要确定调用indexAt是否能返回有效的index即可
那就重载mousePressEvent中调用它吧
void ImTreeView::mousePressEvent(QMouseEvent * event)

 if(event->button()&Qt::RightButton)
 {
  int xPos = event->x();
  int yPos = event->y();
  // 返回点击处所在的记录
  QModelIndex idx = indexAt(QPoint(xPos, yPos));
  if (!idx.isValid())
  {
   setCurrentIndex(idx);
  }
  // else cont
 }
 QTreeView::mousePressEvent(event);
}
阅读(4343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~