用鼠标左键点击QTreeWidget里的项时,水平滚动条会回到最左边的问题

在项目开发中,实现了目录树,当目录名过长,或者展开的项比较多时,此时水平滚动条会出现,若拖动水平滚动条到中间,或最右端,点击QTreeWidget的某项,会导致水平滚动条移动到最左端。

解决的方法:

首先继承QTreeWidget,重写它,定义两个变量

 

1.在类的头文件声明两个变量

    bool                         m_isItemClicked;
    int                          m_horizontalScrollBarPos;

2.在响应的点击函数里添加如下代码,获取点击时水平滚动条的位置

void CLocalDirTreeWgt::OnLeftTreeItemClicked(QTreeWidgetItem * item, int column)
{
    m_isItemClicked = true;
    m_horizontalScrollBarPos = m_leftTreeWidget->horizontalScrollBar()->sliderPosition();   

}

3.实现水平滚动条的响应槽函数

void CLocalDirTreeWgt::onLeftHorizontalScrollBarChange(int value)
{
    if (m_isItemClicked)
    {
        m_leftTreeWidget->horizontalScrollBar()->setValue(m_horizontalScrollBarPos);
        m_isItemClicked = false;
    }
}

4.关联槽函数

    connect(m_leftTreeWidget->horizontalScrollBar(), SIGNAL(valueChanged(int)), this, SLOT(onLeftHorizontalScrollBarChange(int)));

你可能感兴趣的:(QT)