我想高亮显示鼠标悬停在我的QTableWidget
上的行。
当我将鼠标悬停时,只突出显示单个单元格。
我尝试过这样做:
bool MyTabWidget::eventFilter(QObject *target, QEvent *event)
{
if( target == ui->MyTableWidget )
{
//Just to print the event type
qDebug() <<"EventType : "<<event->type();
}
}
输出:EventType : 13
。
`(13 = QEvent::Move)`
我已经失去谷歌了。但找不到合适的解决办法。
是否有其他方法来满足我的要求(在鼠标悬停时突出显示整行)?
请帮帮忙。提前谢谢。
编辑:
请参考下面的屏幕截图,以获得更清晰的信息。
这是我的QTableWidget
,我想更改鼠标悬停的红色边框(编辑)行的背景色。
发布于 2017-09-15 03:25:35
这里是我的实现,它工作的well.First应该是QTableView/QTabWidget子类,在mouseMoveEvent/dragMoveEvent函数中向QStyledItemDelegate发出一个信号,.This信号将发送悬停索引。
在QStyledItemDelegate中,使用成员变量hover_row_(在槽绑定到上面的信号中更改)来告诉画图函数哪一行是悬停的。
下面是代码示例:
//1: Tableview :
void TableView::mouseMoveEvent(QMouseEvent *event)
{
QModelIndex index = indexAt(event->pos());
emit hoverIndexChanged(index);
...
}
//2.connect signal and slot
connect(this,SIGNAL(hoverIndexChanged(const QModelIndex&)),delegate_,SLOT(onHoverIndexChanged(const QModelIndex&)));
//3.onHoverIndexChanged
void TableViewDelegate::onHoverIndexChanged(const QModelIndex& index)
{
hoverrow_ = index.row();
}
//4.in Delegate paint():
void TableViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
...
if(index.row() == hoverrow_)
{
//HERE IS HOVER COLOR
painter->fillRect(option.rect, kHoverItemBackgroundcColor);
}
else
{
painter->fillRect(option.rect, kItemBackgroundColor);
}
...
}
发布于 2019-12-27 18:03:10
我也有类似的任务和答案,白香山帮了我,但它只工作时,鼠标按下,而不是简单的徘徊。我在qt论坛上通过用户mrjj的帮助解决了这个问题,他建议我应该在TableView中将“TableView”属性(在我的例子中是CustomView)设置为"true“。
CustomView::CustomView(QWidget *parent) : QTableView(parent)
{
this->setMouseTracking(true);
connect(this,SIGNAL(hoverIndexChanged(const QModelIndex&)),parent,SLOT(onHoverIndexChanged(const QModelIndex&)));
}
发布于 2020-08-10 13:34:38
这不是解决问题的正确方法,但如果您想继续使用QTableWidget,您只需显示垂直标题并单击上面突出显示其特定行。
https://stackoverflow.com/questions/23111075
复制相似问题