展开全部

//不解释,自己看。不保证完整,仅供思路参考

#include

#include "TableView.h"

#include

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

QStandardItemModel model;

for ( int col = 0; col

{

QList list;

for ( int row = 0; row

{

list.append(new QStandardItem);

}

model.appendColumn(list);

}

TableView view;

view.setModel(&model);

view.show();

return a.exec();

}

#ifndef IVIEW_H

#define IVIEW_H

class IView {

public:    virtual void setMouseOver(const int) =0;

};

#endif // IVIEW_H

#ifndef TABLEVIEW_H

#define TABLEVIEW_H

#include #include

#include

#include "IView.h"

#include "Delegate.h"

class TableView : public QTableView, public IView {    Q_OBJECT

private:    int currHovered;

void mouseMoveEvent(QMouseEvent *event);    void disableMouseOver();

public:    TableView(QWidget *parent = 0);

void setMouseOver(const int);};

#endif // TABLEVIEW_H

#include "TableView.h"

#include

TableView::TableView(QWidget *parent) : QTableView(parent), currHovered(-1)

{

Delegate *delegate = new Delegate;

delegate->setView(this);

setItemDelegate(delegate);

setMouseTracking(true);

}

void TableView::setMouseOver(const int row)

{

if ( row == currHovered) return;

QStandardItemModel *_model = static_cast(model());

for ( int col = 0; col columnCount(); col++ )

{

QStandardItem *item = _model->item(row, col);

item->setBackground(QBrush(QColor("red")));    }

if ( currHovered != -1 )

{ disableMouseOver(); }

currHovered = row;

}

void TableView::disableMouseOver()

{

QStandardItemModel *_model = static_cast(model());

for ( int col = 0; col columnCount(); col++ )

{

QStandardItem *item = _model->item(currHovered, col);

item->setBackground(QBrush(QColor("white")));

}

}

void TableView::mouseMoveEvent(QMouseEvent *event)

{

// TODO: you need know when mouse are not in table rect

// then you need disable over

QTableView::mouseMoveEvent(event);

}

#ifndef DELEGATE_H

#define DELEGATE_H

#include

#include "IView.h"

class Delegate : public QStyledItemDelegate {

private:

IView *view;

public:

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;

void setView(IView *view) { this->view = view; }

};

#endif // DELEGATE_H

#include "Delegate.h"

#include

void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

{

QStyleOptionViewItemV4 o = option;

initStyleOption(&o, index);

if ( o.state & QStyle::State_MouseOver )

{

view->setMouseOver(index.row());

}

o.state &= ~32313133353236313431303231363533e78988e69d8331333332626134QStyle::State_MouseOver;

QStyledItemDelegate::paint(painter, o, index);

}

python tablewidget 颜色_QT中,QTableView鼠标移动到item上时该item所在行的背景颜色变成其他颜色,这要怎么实现...相关推荐

  1. web前端中——this指向以及this的应用,函数的调用——this代码举例说明——举例:当鼠标划到列表上时,出现div内容,当鼠标移开列表时,div隐藏

    一: //this:这个 //想要知道this代表着什么可以直接在中输入alert(this); //由此可以看出window是JS中的"老大" eg:alert(1);其实就是w ...

  2. java鼠标经过时变色_将鼠标悬停在标签上时,鼠标指针会变为手形

    您可能在某些浏览器中获得手形光标的原因是因为大多数浏览器中标签元素的主要用途之一是为表单输入元素提供可单击的描述 . 例如,这是 元素的典型用法: I agree to these terms 在大多 ...

  3. html鼠标悬停填充表格,鼠标移到表格上时,鼠标所在行放大高亮显示【实例】...

    本文给大家介绍一个比较有趣的CSS Table表格,当鼠标移到表格上时,鼠标所在行放大高亮显示. 鼠标所在行放大高亮显示 HTML代码html> Table V01 * { margin: 0p ...

  4. AD19实时高亮显示网络,当鼠标悬停在网络上时能自动高亮

    今天检查电路时发现有网络,没连接到,很伤心,发现这是版本的问题AD16能实时高亮显示而AD19不能 S+P选住某个网络,与CTRL+H相同效果 CTRL+鼠标左键也可以显示 但这都不是我想要的效果,我 ...

  5. html 图片鼠标移上去点亮,CSS3 实现鼠标移到图片上时一片亮光一闪而过的效果...

    01 效果描述 CSS3 实现鼠标移到图片上时一片亮光一闪而过的效果 02 效果图摘 03 关键代码 html: CSS: .hover14{ width:500px; float:left; } . ...

  6. quest3D中解决鼠标移动到物体上弹出文字

    根据这个图能很好的解决,当鼠标移动到物体上的时候弹出对应文字的问题.希望大家继续加油多多思考! 转载于:https://www.cnblogs.com/ileimingGG/archive/2011/ ...

  7. python怎么在运行中查看执行状态_python,_python程序运行时 查看对象状态,python - phpStudy...

    python程序运行时 查看对象状态 不知大家有没有用过Rthymbox的python console. Rthymbox可以在运行的时候,让它的 交互式命令行 对程序进行控制. 比如说可以调用pla ...

  8. java中检测鼠标_java – 在屏幕上检测鼠标移动

    完全透明的框架不会接收鼠标事件. 这是使用MouseInfo的替代方法.这适用于应用程序的组件.是不可见的(透明的),未聚焦的或最小化的. import java.awt.*; import java ...

  9. C#中在鼠标经过Button控件时显示提示信息(弹出气泡提示框)

    C#有个ToolTip的控件是弹出气泡提示框的,在界面上放一个ToolTip1控件,可以在所有需要弹出气泡的控件的属性中的"toolTip1的ToolTip"填写需要提示的信息就行 ...

最新文章

  1. [转](不理想)Ubuntu下更改主显示器
  2. 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
  3. Windows Phone Dev Notes-如何使用ConnectionSettingsTask 来启动连接设置页面
  4. java cache缓存_为什么 Java 中“1000==1000”为false,而”100==100“为true?
  5. ACM练习 小Z来讲排名规则(WA)【C++ stable_sort稳定排序】
  6. kafka和zookeeper一键启停脚本(以及kafka关不掉问题解决)
  7. chrome前端开发工具_精通Chrome开发人员工具:更高级别的前端开发技术
  8. sf | 读取和保存空间矢量数据
  9. 编程模式(schema) —— 表驱动法(table-driven)
  10. 错误代码: 1005 Can't create table 'hibernate.bill' (errno: 150)
  11. JavaScript杂谈(顺便也当知识积累)
  12. 学习ExtJS(九) fit布局
  13. 最新凌风云支付系统网站源码全解无后门V4.1.1版本
  14. python播放音乐同步歌词_Python零基础学习代码实践 —— 模拟播放器中的歌词显示...
  15. Ubuntu下svn回滚到指定版本
  16. c语言制作文字画面剧情游戏(摸索课设
  17. linux 筛选重复数据,Linux下uniq筛选
  18. 轻办公之Windows下的可道云
  19. 坐标变换怎么转?转的方向和矩阵正余弦正负的关系
  20. pymysql连接mysql数据库try_pymysql操作mysql数据库

热门文章

  1. powershell 运行策略
  2. [转]阿里编程规范(精简版)
  3. React-引领未来的用户界面开发框架-读书笔记(六)
  4. 那一年,我考入了西北师范大学GIS专业,然而我很迷茫,GISer的职业规划到底是怎样的?
  5. 【测绘程序设计】坐标正算神器V1.0(附C/C#/VB源程序)
  6. Android Studio开发基础之Service
  7. 剑指offer之partition算法
  8. 【iVX 初级工程师培训教程 10篇文拿证】02 数值绑定及自适应网站制作
  9. node中间件mysql_nodejs 中使用mysql数据有没有类似 mongoose 的中间件?
  10. java程序员遇到的问题_JAVA程序员最常遇见的10个异常