explicit
Delegate
(
QObject
*
parent
=
nullptr
)
;
void
onHoverIndexChanged
(
const
QModelIndex
&
index
)
;
void
paint
(
QPainter
*
painter
,
const
QStyleOptionViewItem
&
option
,
const
QModelIndex
&
index
)
const
;
signals
:
private
:
int
m_hoverrow
;
QBrush kHoverItemBackgroundcColor
;
public
slots
:
#
endif
cpp文件
#include "delegate.h"
#include <QDebug>
Delegate::Delegate(QObject *parent) : QItemDelegate(parent)
QColor color(247,33,33,100);
kHoverItemBackgroundcColor = QBrush(color);
void Delegate::onHoverIndexChanged(const QModelIndex &index)
m_hoverrow = index.row();
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
painter->drawText(option.rect,index.data().toString());
if(index.row() == m_hoverrow)
painter->fillRect(option.rect, kHoverItemBackgroundcColor);
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
ui->setupUi(this);
ui->tableWidget->setMouseTracking(true);
delegate = new Delegate(this);
connect(this,&MainWindow::hoverIndexChanged,delegate,&Delegate::onHoverIndexChanged);
ui->tableWidget->setItemDelegate(delegate);
MainWindow::~MainWindow()
delete ui;
void MainWindow::on_tableWidget_entered(const QModelIndex &index)
emit hoverIndexChanged(index);
这里说的绑定单击事件其实就是转到槽clicked()。
在普通的QTableView中如果我们想要绑定clicked(),直接在UI界面转到槽即可,但是对于连接数据库的QTableView来说,表格中的数据是不会在我们能够编辑的UI界面中直接显示出来的,那么这里要讨论的情况就是如何为和数据库连接的QTableView中的每一行绑定clicked事件。
我用的方法是直接在UI编辑界面中给QTableView转到槽:
然后再在这个槽函数里去获取当前选中行...
/行自适应宽度 tableWidget->verticalHeader()->setResizeMode(QHeaderView::Stretch);value常用参数:NoEditTriggers--不能对表格内容进行修改CurrentChanged--任何时候都能对单元格修改DoubleClicked--双击单元格SelectedClicked--单击已选中的内容 AnyKeyPressed--按下任意键就能修改。
QTableView/QTableWidget 实现hover一行效果
在网上看到一些实现这个效果都是通过鼠标事件判断悬浮在哪一行实现的,这里提供另一种思路。
在Qt的模型/视图/代理框架里面,关于item的绘制是交给代理实现的,默认的QStyledItemDelegate的paint会去调用
virtual void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const;
这个虚函数,初始化一些
QTableView实现鼠标悬浮(hover)行高亮显示
需要实现QTableview鼠标悬浮时当前行高亮显示。但是实现的过程中发现一开始的方案不能用,必须捕捉鼠标的move事件通过Delegate自己绘制背景实现。一开始想通过重载Delegate里面的editorEvent捕捉。后面发现鼠标的move事件可以捕捉的到,但是leave事件获取不到,这样就会造成鼠标移出表格始终又一行高亮。后面只能通...
通过效果图可以看到,当某一个item处于选中但不活跃状态就没法出现hover的样式了。2023/1/8日更新,首先当item处于。状态的item及那一行的每一个item进行绘制即可。这样的好处时可以通过stylesheet来控制。时就是选中但不活跃的状态,此时我们的鼠标在移动到item上面那么它的状态为。所以我们只要想办法去掉。状态同时出现时会优先展示。但是它展示出来的还是。
首先想到的思路就是鼠标悬浮事件,即安装QTableView的事件过滤器,然后在eventFilter进行判断即可。实现很简单,主要在针对qt界面处理子界面的事件响应时,主要是还没搞清楚ui.tableView->viewport()->installEventFilter(this)的使用场景,就先记录一下。网上有一种说法,还需要使用ui.tableView->viewport()->installEventFilter(this),否则QTableView的事件过滤器无效,不过我目前还没有遇到这种情况。
QT中如何获取QTableView当前鼠标在的行,是所在的行,没有选中的,只是移到item上
要点:QTableView的signal
void entered ( const QModelIndex & index );
将其连接至你的槽方法。
当移动到某个item上时,可以从槽方法的QModelIndex获取相应的行列信息。
private slots:
void ReceiveEntered ( const QModelIndex & index );
connect(ui
QT表格控件QTableView简介 表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示数据模型,C(controllor)控制在Qt中被弱化,与View合并到一起。QTableView简...