怎么判断是点击了tableview的外部?

不易易 2018-12-26 03:27:10
我想通过点击处的index的有效无效来判断,但是不行。有意外!
请问有什么办法判断吗?

请教各位!如图上下两个tableview1,tableview2,
tableview1有比较多的行,有下拉条,
我重载mousepress事件,当点击下面的空白时,
tableview1的index(indexAt(pos))仍然是有效的,就是隐藏在tableview2下的那行;
如果下拉条拉到底,tableview2下没有tableview1的隐藏行时是可以判断其无效的;
void Widget::mousePressEvent(QMouseEvent *event)
{
qDebug()<<"mousePressEvent";
QModelIndex index = ui->tableView->indexAt(event->pos());
if( index.isValid()){//..........
}
...全文
2653 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
不易易 2019-01-07
  • 打赏
  • 举报
回复
引用 7 楼 weiweiqiao 的回复:
[quote=引用 6 楼 不易易 的回复:]
[quote=引用 4 楼 管理員 的回复:]
怎么感觉你这么麻烦呢?tableView有clicked 事件,参数是所点击的 index,如果点击了空白处,index.row() == -1

你是想要这个?

之前我也这么理解的,可是不是这么回事啊,你可以试试。
当你点击了一行时,再点击别处,index.row()不是-1,仍然是那个有效的行[/quote]
你看这样行不?你同多index获取对应的父窗口并转换为qtableview,如果转换失败呢认为点击地方不是在qtableview内部。[/quote]
你同多index获取对应的父窗口并转换为qtableview,不太明白你的意思。你写成代码看看?谢谢
  • 打赏
  • 举报
回复
引用 6 楼 不易易 的回复:
[quote=引用 4 楼 管理員 的回复:]
怎么感觉你这么麻烦呢?tableView有clicked 事件,参数是所点击的 index,如果点击了空白处,index.row() == -1

你是想要这个?

之前我也这么理解的,可是不是这么回事啊,你可以试试。
当你点击了一行时,再点击别处,index.row()不是-1,仍然是那个有效的行[/quote]
你看这样行不?你同多index获取对应的父窗口并转换为qtableview,如果转换失败呢认为点击地方不是在qtableview内部。
不易易 2019-01-03
  • 打赏
  • 举报
回复
引用 4 楼 管理員 的回复:
怎么感觉你这么麻烦呢?tableView有clicked 事件,参数是所点击的 index,如果点击了空白处,index.row() == -1

你是想要这个?

之前我也这么理解的,可是不是这么回事啊,你可以试试。
当你点击了一行时,再点击别处,index.row()不是-1,仍然是那个有效的行
不易易 2019-01-03
  • 打赏
  • 举报
回复
引用 3 楼 weiweiqiao 的回复:
[quote=引用 2 楼 不易易 的回复:]
[quote=引用 1 楼 简拉基茨德 的回复:]
试试eventFilter事件过滤器

试了,但是检测不到鼠标点击事件呢!代码如下:
ui->tableView->installEventFilter(this);
bool Widget::eventFilter(QObject *watched, QEvent *event)
{

if(watched==ui->tableView)
{
if(event->type()== QEvent::MouseButtonPress)
{
qDebug()<<"MouseButtonRelease";
QMouseEvent *e = (QMouseEvent*)event;
QModelIndex index = ui->tableView->indexAt(e->pos());
if( index.isValid())
{
qDebug()<<"mousePressEvent valid-=-=-="<<index.row();
}
else
{
ui->pushButton_delwj->setEnabled(false);
ui->pushButton_share->setEnabled(false);
}
return true;
}
else
{
// qDebug()<<event->type()<<"dddddddddddddddddd";
return false;
}
}
return QWidget::eventFilter(watched,event);
}
[/quote]
你注册的事件过滤是在哪个控件下?
如果你是在注册的控件或者子控件下点击,应该是可以检测到鼠标点击事件的。如果你在控件的父控件或者别的控件下点击,应该是收不到的。[/quote]
这个可以了。问了别人,需要注册事件过滤的是tableview的viewport,不是tableview。
不过,我最终的目的是:怎么判断点击了viewport之外的控件或空白处?
王桑的一天 2018-12-31
  • 打赏
  • 举报
回复
怎么感觉你这么麻烦呢?tableView有clicked 事件,参数是所点击的 index,如果点击了空白处,index.row() == -1

你是想要这个?
  • 打赏
  • 举报
回复
引用 2 楼 不易易 的回复:
[quote=引用 1 楼 简拉基茨德 的回复:]
试试eventFilter事件过滤器

试了,但是检测不到鼠标点击事件呢!代码如下:
ui->tableView->installEventFilter(this);
bool Widget::eventFilter(QObject *watched, QEvent *event)
{

if(watched==ui->tableView)
{
if(event->type()== QEvent::MouseButtonPress)
{
qDebug()<<"MouseButtonRelease";
QMouseEvent *e = (QMouseEvent*)event;
QModelIndex index = ui->tableView->indexAt(e->pos());
if( index.isValid())
{
qDebug()<<"mousePressEvent valid-=-=-="<<index.row();
}
else
{
ui->pushButton_delwj->setEnabled(false);
ui->pushButton_share->setEnabled(false);
}
return true;
}
else
{
// qDebug()<<event->type()<<"dddddddddddddddddd";
return false;
}
}
return QWidget::eventFilter(watched,event);
}
[/quote]
你注册的事件过滤是在哪个控件下?
如果你是在注册的控件或者子控件下点击,应该是可以检测到鼠标点击事件的。如果你在控件的父控件或者别的控件下点击,应该是收不到的。
不易易 2018-12-28
  • 打赏
  • 举报
回复
引用 1 楼 简拉基茨德 的回复:
试试eventFilter事件过滤器

试了,但是检测不到鼠标点击事件呢!代码如下:
ui->tableView->installEventFilter(this);
bool Widget::eventFilter(QObject *watched, QEvent *event)
{

if(watched==ui->tableView)
{
if(event->type()== QEvent::MouseButtonPress)
{
qDebug()<<"MouseButtonRelease";
QMouseEvent *e = (QMouseEvent*)event;
QModelIndex index = ui->tableView->indexAt(e->pos());
if( index.isValid())
{
qDebug()<<"mousePressEvent valid-=-=-="<<index.row();
}
else
{
ui->pushButton_delwj->setEnabled(false);
ui->pushButton_share->setEnabled(false);
}
return true;
}
else
{
// qDebug()<<event->type()<<"dddddddddddddddddd";
return false;
}
}
return QWidget::eventFilter(watched,event);
}
简拉基茨德 2018-12-27
  • 打赏
  • 举报
回复
试试eventFilter事件过滤器

16,819

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧