您的位置:首页 > 编程语言 > Qt开发

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);
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: