在项目开发中,实现了目录树,当目录名过长,或者展开的项比较多时,此时水平滚动条会出现,若拖动水平滚动条到中间,或最右端,点击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)));