重写QTableView类解决鼠标单击、双击问题

问题描述:想通过鼠标的单击查看文件,双击支持修改。QTableView中没有区分点击一下,两下

解决方式:重写QTableView类

流程:新建一个TableView类文件,复制一下代码即可

TableView.h文件

class TableView : public QTableView
{
    Q_OBJECT
public:
    explicit TableView(QWidget *parent = 0);
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseDoubleClickEvent(QMouseEvent *event);

signals:
    void leftClicked(const QModelIndex &index);
    void leftdoubleClicked();


};

TableView.cpp文件

TableView::TableView(QWidget *parent):QTableView(parent)
{
}
void TableView::mousePressEvent(QMouseEvent *event)
{
   if(event->button()==Qt::LeftButton)
   {
       setCurrentIndex(QModelIndex());
       QTableView::mousePressEvent(event);
       QModelIndex index=currentIndex();
       if(index.row()<0&&index.column()<0)
           return;
       emit leftClicked(index);
     //  qDebug()<<"左击一下";
   }
}
void TableView::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(event->button()==Qt::LeftButton)
    {
       // qDebug()<<"左击两下";
        emit leftdoubleClicked();
    }

}

最后,提升窗口部件即可。

欢迎各位留言交流

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Qt中,QTableView是一个用于显示和编辑表格数据的控件。当用户单击QTableView中的单元格时,可以触发一些操作。 首先,可以通过重写QTableView的mousePressEvent()函数来捕获单击事件。在这个函数中,可以获取到单击的坐标和所在的行列信息。例如: ```cpp void MyTableView::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) // 判断是否为左键单击 { QModelIndex index = indexAt(event->pos()); // 获取单击的index int row = index.row(); int col = index.column(); // 执行相关操作,例如获取单元格的数据或者进行编辑 // ... } QTableView::mousePressEvent(event); // 将事件传递给父处理 } ``` 在实际使用中,可以根据需要在mousePressEvent()函数中添加具体的操作。例如,可以获取单元格的数据,或者编辑单元格的内容。 此外,还可以使用QItemSelectionModel来进行单击时的操作。QItemSelectionModel可以用于跟踪QTableView中的选中项。可以通过以下代码获取当前选中的单元格: ```cpp QItemSelectionModel *selectionModel = tableView->selectionModel(); QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); foreach(const QModelIndex &index, selectedIndexes) { int row = index.row(); int col = index.column(); // 执行相关操作 // ... } ``` 总之,QTableView单击事件可以通过重写mousePressEvent()函数或使用QItemSelectionModel来进行捕获和处理。根据具体需求进行相应的操作和处理即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值