• 16007阅读
  • 8回复

给QTableView中的一列添加按钮,如何获取按钮的点击事件和行号。 [复制链接]

上一主题 下一主题
离线蚂蚁power
 

只看楼主 倒序阅读 楼主  发表于: 2016-01-20
如图所示:当我点击“发送控制”按钮时如何获取当前按钮所在的行。(按钮是循环动态添加的)
for(int i = 0;i<list.count();i++)
{
     m_button = new QPushButton("发送控制");
     connect(m_button,SIGNAL(clicked(bool)),this,SLOT(slot_sendCMD(bool)));
     tableView->setIndexWidget(model->index(model->rowCount()-1,6),m_button);
}

//获取选中的按钮的坐标值
int x = m_button->frameGeometry().x();
int y = m_button->frameGeometry().y();
QModelIndex index = tableView->indexAt(QPoint(x,y));
这样只能获取最后一个按钮的行列号。
图片不能显示了。。。。。。


在线lemonzll

只看该作者 1楼 发表于: 2016-01-20
你可以循环创建按钮的时候对按钮用setProperty("row", row)和setProperty("column", col)设置行列,点击按钮的时候你用property函数取出row和column就行了
离线蚂蚁power

只看该作者 2楼 发表于: 2016-01-20
回 lemonzll 的帖子
lemonzll:你可以循环创建按钮的时候对按钮用setProperty("row", row)和setProperty("column", col)设置行列,点击按钮的时候你用property函数取出row和column就行了 (2016-01-20 13:46) 

这样确实可以取到设置的行列值。但是 不是我想要的。可能上面我没有说清楚。因为是在循环里面new的按钮 然后加了信号槽。这样导致当你点击任何一行上面的按钮 他都会触发最后一个按钮的槽函数。所以得到的还是最后一行的 行列值。
离线jxgyzhang

只看该作者 3楼 发表于: 2016-01-20

槽里这么获取按钮
QPushButton *btn = (QPushButton *) sender();
QString row= btn->property("row").toString();
在线lemonzll

只看该作者 4楼 发表于: 2016-01-20
用sender()那个方式是对的,这样得到的就是对应的你点击的按钮,然后用property("row")转成int就行了
离线蚂蚁power

只看该作者 5楼 发表于: 2016-01-21
3楼和4楼正解。按照他们说的 解决了。谢谢 二位。
离线巫添良

只看该作者 6楼 发表于: 2019-03-31
回 lemonzll 的帖子
lemonzll:用sender()那个方式是对的,这样得到的就是对应的你点击的按钮,然后用property("row")转成int就行了 (2016-01-20 16:30) 

大佬 按照这样可以 但是如果删除了某一行那按钮的row的属性还是不变 应该怎么办?
在线lemonzll

只看该作者 7楼 发表于: 2019-03-31
这个是看情况,楼主不怎么考虑删除,你如果删除比较多,就考虑下其他行列的数据model里面怎么来的,比如每一行是不是对应个QObject类当数据源,如果有,setProperty里面直接放QObject类,然后再从QObject对象索引出来行列,方式很灵活。上面property里面放行列的方式也可以,就是如果你删除某一行的话,就得把所有大于该行的按钮的property属性里的row更新下
离线fu22507411

只看该作者 8楼 发表于: 2019-03-31
试试用
virtual QModelIndex
indexAt(const QPoint &point) const = 0这个函数来获取。
point由button的mapfromWidget来获取
邮箱jiahao_coffee@foxmail.com 有问题可以免费咨询,有空都会回答,不过太难了我答不上来不要介意哈
快速回复
限100 字节
 
上一个 下一个