VS2010+QT5编程之巧妙运用定时器解决QTreeView/QTableView等QAbstractItemView实时条目统计问题
来源:互联网 发布:lol徐老师淘宝店多少 编辑:程序博客网 时间:2024/05/17 04:14
QTableView等QAbstractItemView常用来做为表格显示,但一般情况下会放在另一个大框架下。比如说我写了一个数据库编辑器,主框架界面是QMainWindow,包含菜单栏、工具栏、状态栏,QTableView里显示的是数据库获取到的表格数据。
可我想在状态栏显示QTableView里统计的实时选取条目的数目,说到这可能大家觉得问题太简单,写一个简单线程或者重写QTableView类里的mousePressEvent(QMouseEvent *event)单击响应函数不就行了?本着能不写线程就不写线程的原则,我决定重写QTableView类里的mousePressEvent(QMouseEvent *event)单击响应函数,代码如下:
class TableView : public QTableView{Q_OBJECTsignals:void left_clicked();//单击信号protected:virtual void mousePressEvent(QMouseEvent *event){if (event->button() == Qt::LeftButton){emit left_clicked();//发射单击信号}QTableView::mousePressEvent(event);}};
TableView *centerView;centerView = new TableView;connect(centerView,SIGNAL(left_clicked()),this,SLOT(center_clicked()));
void MyDemo::center_clicked(){QModelIndexList SelectedIndexList = centerView->selectionModel()->selectedIndexes();int nCount = SelectedIndexList.count(); //nCount就是QTableView里实时选取条目的数目}
这样写是没问题的,但你会发现这个nCount的值并不准确,比如说你选中一条记录,结果发现nCount的值是0,你选了五条记录,nCount的值却是3,而3正是上一次选取记录的值。
出现这个问题的原因很简单,就是你发射单击信号left_clicked()的的时候,实际你单击的那一下在QTableView上还没来得及做出选择,简单来说就是单击信号left_clicked()发射的太快了。
解决方案也是非常简单,用定时器延迟发射单击信号left_clicked()就可以了。
代码修改如下:
class TableView : public QTableView{Q_OBJECTsignals:void left_clicked();//单击信号protected:virtual void mousePressEvent(QMouseEvent *event){if (event->button() == Qt::LeftButton){QTimer *timer = new QTimer(this); timer->singleShot(100,this,SIGNAL(left_clicked())); //发射单击信号}QTableView::mousePressEvent(event);}};
这样就改成了100ms后发射单击信号left_clicked(),一切OK!
0 0
- VS2010+QT5编程之巧妙运用定时器解决QTreeView/QTableView等QAbstractItemView实时条目统计问题
- VS2010+QT5编程之QTableView数字排序
- VS2010+QT5编程之为QTableView添加右键菜单
- QAbstractItemView,QTableView
- VS2010+QT5编程之QTableView同时删除选中的多行
- QT5 QTreeview显示问题
- VS2010+QT5编程之解决中文乱码及一些编译未通过问题
- 算法学习笔记之四:巧妙运用指针解决链表、字符串、数组等问题(同向双指针VS对向双指针)
- QT5 +VS2010 SP1 解决中文乱码问题
- QT5 +VS2010 SP1 解决中文乱码问题
- QTreeView QTableview设置相关
- QTreeView QListView QTableView 类
- VS2010+Qt5.1编程
- QAbstractView(QTreeView、QTableView等)鼠标滑过显示Tooltip(帮助)当前指向单元格文字
- VS2010+QT5编程之setWindowIcon报错解决方案
- VS2010+QT5编程之QString与char*的相互转换
- VS2010/VS2012/VS2013+QT5编程之开发环境配置
- QT5.5 VS2010编程入门
- [转]短信验证码如何防止不恶意点击被刷!
- Cannot run program "XXXXX/android-sdks/build-tools/aapt.exe": error=2,
- TP接口token
- MYSQL启动后报:ERROR! The server quit without updating PID file错误的问题解决
- leetcode Two Sum 哈希表
- VS2010+QT5编程之巧妙运用定时器解决QTreeView/QTableView等QAbstractItemView实时条目统计问题
- OpenMAX/IL: OMX IL 学习笔记【1】- 接口与头文件
- Lex 和 Yacc 编程环境配置(Parser Generator2 + VC6.0 配置)
- Spring中Hibernate配置笔记
- Hibernate学习总结
- plsql中异常的传递
- logistic regression 最基础的分类算法
- C++实现字符串之模式匹配(一)
- java 中构建可执行 jar 包的几种方式