Qt 延迟刷新View的技巧
2015-07-11 14:06
435 查看
#include <QTreeView>
class RoomTreeWidget : public QTreeView
{
Q_OBJECT
public:
RoomTreeWidget(QWidget *parent = 0);
~RoomTreeWidget();
void setVScrollDelayUpdateTime(quint32 mesc);
protected:
void timerEvent(QTimerEvent *event);
private:
quint32 vScrollDelayUpdateMesc;
int vScrollDelayUpdateTimerId;
};
#endif // ROOMLISTWIDGET_H
#include "roomtreewidget.h"
#include <QScrollBar>
#include <QTimerEvent>
RoomTreeWidget::RoomTreeWidget(QWidget *parent)
: QTreeView(parent), vScrollDelayUpdateMesc(0), vScrollDelayUpdateTimerId(0)
{
setUniformRowHeights(true);
}
RoomTreeWidget::~RoomTreeWidget()
{
}
void RoomTreeWidget::setVScrollDelayUpdateTime(quint32 mesc)
{
if (vScrollDelayUpdateMesc == mesc)
{
return;
}
vScrollDelayUpdateMesc = mesc;
QScrollBar *vScrollBar = verticalScrollBar();
if (vScrollBar)
{
if (vScrollDelayUpdateMesc > 0)
{
vScrollBar->setTracking(false);
if (vScrollDelayUpdateTimerId != 0)
{
killTimer(vScrollDelayUpdateTimerId);
}
vScrollDelayUpdateTimerId = startTimer(vScrollDelayUpdateMesc);
}
else
{
vScrollBar->setTracking(true);
if (vScrollDelayUpdateTimerId != 0)
{
killTimer(vScrollDelayUpdateTimerId);
vScrollDelayUpdateTimerId = 0;
}
}
}
}
void RoomTreeWidget::timerEvent(QTimerEvent *event)
{
QTreeView::timerEvent(event);
if (event->timerId() == vScrollDelayUpdateTimerId)
{
QScrollBar *vScrollBar = verticalScrollBar();
if (vScrollBar)
{
vScrollBar->triggerAction(QSlider::SliderMove);
}
}
}
相关文章推荐
- ARM的QT phonon 的移植
- Ubuntu 12.04安装qtcreator后无法打开,终端运行提示:Could not initialize GLX
- VS集成Qt环境搭建
- 软件自动更新解决方案及QT实现
- QtLog
- [转] 解析Qt资源文件使用
- Qt button() 与 buttons() 区别
- 猜猜看软件-学习总结(不定时更新)
- 猜猜看软件-学习总结(不定时更新)
- QT学习相关
- QToolTip显示提示 设置提示的位置
- 在Qt中移植VPU编解码程序时遇到的问题
- QT中QWidget、QDialog及QMainWindow的区别
- PyQt多窗口调用
- qt调用vlc响应windows消息
- QT读文件夹内所有文件名
- qt2.2.0 X86版本和arm版本的编译和运行
- MQTT V3.1协议规范(明哥翻译)
- Qt学习之路(17): Qt标准对话框之QMessageBox
- Qt 的一些心得(背景设置,圆角,半透明)