找回密码
 立即注册
收起左侧

如何实现单击表格中的单元格,显示下拉框

2
回复
9446
查看
[复制链接]

尚未签到

来源: 2021-1-8 11:22:30 显示全部楼层 |阅读模式
1Qter豆
使用代理的方式在QTableVIew中的第0列插入了QComboBox,双击第0列的单元格时,显示QComboBox。如何将这一动作转换成单击,即类似EXcel中的数据有效性,单击单元格时显示QComboBox

回复

使用道具 举报

累计签到:41 天
连续签到:1 天
2021-1-8 21:35:40 显示全部楼层
重写视图类,重新实现mousePressEvent()。

void CTreeView::mousePressEvent(QMouseEvent *event) {
    QPoint pos = event->pos();
    QPersistentModelIndex index = indexAt(pos);
    // 如果本次选择和上次不一样,则需要关闭上次的编辑器
    if ((index != m_indexLast) && m_indexLast.isValid()) {
        closePersistentEditor(m_indexLast);
    }
    m_indexLast = index;
    if (index.isValid() && (1==index.column())) {
        // 打开编辑器进入编辑状态
        if (index.model()->flags(index) & Qt::ItemIsEditable)
            openPersistentEditor(index);
    }

    QTreeView::mousePressEvent(event);
}

回复

使用道具 举报

尚未签到

2021-1-11 16:47:30 显示全部楼层
@baizy77,谢谢!
具体使用中,有一些疑问,现陈述如下:
1. 自己定义了新的视图类,继承QTableView,按回复重写了mousePressEvent()。
2. 关于变量m_indexLast定义
1)将其定义为类的私有成员变量时,运行时错误:
The inferior stopped because it received a signal from the operating system.

Signal name:      SIGSEGV
Signal meaning: Segmentation fault
调试时发现是在创建新的视图类对象后,给新建对象setModel时出错,出错点: connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
                this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));
不知道为什么会在此处出错。

2)在函数mousePressEvent()实现内部,将其定义为静态变量时,运行无措

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了