• 8208阅读
  • 6回复

[讨论]QTableView添加多个按钮后,如果响应各自点击事件 [复制链接]

上一主题 下一主题
离线smartgps2008
 

只看楼主 倒序阅读 楼主  发表于: 2014-02-24
大家好,我在QTableView单个单元格中添加3按钮
如图:
使用MVC结构,在paint()中绘制3个按钮,在editorEvent()中实现按钮的点击操作,
但不知道如何区分一个单元格中的3个按钮,分别实现各自点击操作处理?
离线wjz2047

只看该作者 1楼 发表于: 2014-02-27
创建按钮的时候,为每个按钮加一个标志,比如数字1,2,3
只要这三个按钮有一个可以区分彼此的属性即可,比如position
离线pengyizhao2

只看该作者 2楼 发表于: 2014-05-12
怎么判断是哪个按下呢
离线shiziyang

只看该作者 3楼 发表于: 2014-05-15
根据鼠标点击位置计算是哪个被点击了,再发对应信号
离线pxiao_xiao

只看该作者 4楼 发表于: 2014-05-15
点击点的坐标 单元格的区域坐标 按钮在单元格内的坐标 算吧

只看该作者 5楼 发表于: 2014-05-15
这个比较简单!两个函数就可以搞定!

void paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const

bool editorEvent(QEvent *event,QAbstractItemModel *model,const QStyleOptionViewItem &option,const QModelIndex &index)
QStyledItemDelegate中paint事件绘制按钮时候有对应的rect1,rect2,rect3,在editorEvent事件判断event的类型,可以转化为QMouseEvent,可以获取mouseEvent->pos(),再进行判断

if (event->type() == QEvent::MouseButtonRelease)
    {
        QMouseEvent *mouseEvent = (QMouseEvent *)event;
        if (mouseEvent->button() == Qt::LeftButton)
        {
           if (rect1.contains(mouseEvent->pos()))
                emit button1Clicked(index);
           else if (rect2.contains(mouseEvent->pos()))
                emit button2Clicked(index);
            else if (rect3.contains(mouseEvent->pos()))
                emit button3Clicked(index);
       }
}
在外部连接对应的槽就OK了!
博客地址:https://waleon.blog.csdn.net
微信公众号:高效程序员
QQ 群:242790253
微信群:加微信(iwaleon),邀请入群。

承接各种 C++/Qt/QML 项目,专业的团队,一流的服务,不二的选择!
离线z55716368

只看该作者 6楼 发表于: 2015-07-13
回 奋斗ing孩子 的帖子
奋斗ing孩子:这个比较简单!两个函数就可以搞定!
void paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
bool editorEvent(QEvent *event,QAbstractItemModel *model,const QStyleOptionViewItem &option,const QModelIndex & .. (2014-05-15 19:36) 

大神、、、、、http://www.qtcn.org/bbs/read-htm-tid-59273.html 能帮我看看这个问题吗?还有一个问题是关于tableview编辑某个单元格后按下回车执行save()函数,这个问题现在我用了按钮事件去解决,但有问题是在编辑之后需要按2次回车而且没有编辑是回车也有作用。我需要的是仅仅在编辑的时候回车。要怎么做呢?
每一个问题 都是一次进步
快速回复
限100 字节
 
上一个 下一个