本文主要是介绍用鼠标左键点击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)));
这篇关于用鼠标左键点击QTreeWidget里的项时,水平滚动条会回到最左边的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!