查看完整版本: [-- 如何知道QTableView的行有没有被选中 --]

QTCN开发网 -> Qt基础编程 -> 如何知道QTableView的行有没有被选中 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

meteor 2009-09-17 13:57

如何知道QTableView的行有没有被选中

如题,碰到这种问题,QTableView 中有几行,当用户点击鼠标且没有任何一行都被选中的话(比如点到了视图的空白处),就会屏蔽掉一些按钮。不知道是否有这样的signal?

robertkun 2009-09-17 14:38
如果不点击QTableView 那怎样触发QTableView的 消息呢?

不过可以给QTableview加QItemSelectionModel ,QItemSelectionModel 包含一些函数

isColumnSelected ( int, const QModelIndex & ) const : bool
isRowSelected ( int, const QModelIndex & ) const : bool
isSelected ( const QModelIndex & ) const : bool

meteor 2009-09-17 17:53
点击QTableView的空白部分不会触发信号,这是关键。clicked和doubleclicked只会在存在的行上点击才会发出信号。
我想是否应该监听鼠标事件呢?

meteor 2009-09-19 00:43
问题解决。QTableView没有处理点击空白处的singal,所以继承了QTableView类,重载了mousePressEvent。

void QMyTableView::mousePressEvent(QMouseEvent * event)
{
   int xPos = event->x();
   int yPos = event->y();
   QModelIndex idx = indexAt(QPoint(xPos, yPos));
    if(idx.isValid( ))
    {
       emit ClickValidArea();
    }
    else
    {
        emit ClickBlankArea();
    }
    QTableView::mousePressEvent(event);
}

robertkun 2009-09-19 10:34
QModelIndex idx = indexAt(QPoint(xPos, yPos));

QModelIndex?这个东东还没有用过。。
看起来还挺爽的~

wywwh 2010-03-01 21:43
mark

wangweiqi23 2011-08-02 22:55
   想法赞一个

lanmanck 2020-12-19 09:11
牛的比,用event->pos即可

lwei24 2021-02-23 14:43
楼主,请问怎么插入空白行呢?这两个ClickValidArea();  ClickBlankArea();信号应该是自定义的吧


查看完整版本: [-- 如何知道QTableView的行有没有被选中 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled