QTableView获取左键点击单元格消息,右键点击单元格消息,双击单元格消息

默认的QTableView若需要监听点击单元格消息,使用信号槽绑定如下信号:

void clicked(const QModelIndex &index) override;
void doubleClicked(const QModelIndex &index) override;

如果要实现监听右键点击单元格消息,则需要实现一个继承自QTableView的新类,重写该函数:

void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;

下面简单实现下QTableView的派生类,重写mousePressEvent消息,监听左右键以及双击单元格的消息

TableView.h文件

#ifndef TABLE_VIEW_H
#define TABLE_VIEW_H

class TableView: public QTableView {

public:
    explicit TableView(QWidget *parent=0);
    ~TableView();

protected:
    void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
};
#define

TableView.cpp文件

#include "TableView.h"

TableView::TableView(QWidget *parent) :QTableView(parent){


}

TableView::~TableView{

}

void TableView::mousePressEvent(QMouseEvent* event)
{
    if (event->button() == Qt::LeftButton)
    {
        QTableView::mousePressEvent(event);
        // 左键点击的单元格
        QModelIndex index = currentIndex();
        // 处理左键事件
        
    }
    if (event->button() == Qt::RightButton)
    {
        QTableView::mousePressEvent(event);
        QModelIndex index = currentIndex();
        // 处理右键事件
        
    }

    if (event->type() == QEvent::MouseButtonDblClick && event->button() == Qt::LeftButton)
    {
        QTableView::mousePressEvent(event);
        QModelIndex index = currentIndex();
        // 处理鼠标双击事件
    }

}

Qt中,`QTableView`是一个用于显示表格数据的高级控件。如果你想要获取特定单元格的内容或控件,你可以通过以下步骤: 1. **引用视图**:首先,你需要将`QTableView`添加到你的UI并将其连接到你的槽函数。通常,你会有一个指向`QTableView`对象的指针。 ```cpp QTableView *tableView = new QTableView(parent); ``` 2. **选择行和列**:使用`setCurrentIndex()`方法选择你想操作的单元格。它接受一个`QModelIndex`对象,可以由`model()->index(row, column)`创建,其中`row`和`column`分别是行和列索引。 ```cpp QModelIndex index = tableView->model()->index(row, column); ``` 3. **获取单元格内容**:如果你想获取单元格的文本或值,可以使用`data()`方法,传入`Qt::DisplayRole`作为参数,因为这是默认用于显示的。 ```cpp QString cellText = tableView->model()->data(index, Qt::DisplayRole).toString(); ``` 4. **访问单元格编辑控件**:`QTableView`通常不直接提供单元格内部编辑控件的访问,但在处理自定义模型(如`QAbstractItemModel`的派生类)时,如果启用了编辑模式(例如,设置`setEditTriggers(QTableWidget::AllEditTriggers)`),在单元格进入编辑状态时,你可以捕获事件并通过事件对象找到编辑控件。 ```cpp connect(tableView, &QTableView::cellChanged, [this](const QModelIndex &index) { QLineEdit *editor = qobject_cast<QLineEdit*>(sender()); // 如果是QLineEdit if (editor) { QString newText = editor->text(); // ...处理编辑后的文本 } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值