qt QScrollArea 实现按钮触发滚动条滚动到指定位置
//网上找了半天,没找到,自己看资料掉头发,尝试出来的结果,凑合能用
//以下代码应该放在按钮的点击触发的槽函数中
//滑动到指定位置 //arrayInputGroupBox GroupBox数组 //mapPosQGroupBox GroupBox数组每一个对应的map键值对,key:arrayInputGroupBox[i]->title().toUpper() val:arrayInputGroupBox[i]->y() //此处保存最初的位置是因为,界面刷新之后,位置也会改变,直接设置绝对值,比较简单 //核心代码 此处-9是为了页面好看 //QScrollBar *scrollBary = ui->scrollAreaInput->verticalScrollBar(); //scrollBary->setValue(iterPosQGroupBox.value()-9); QString cmd="0x"+QString::number(cmdflag,16).toUpper();//0x1001=>1001 for(int i=0;i<arrayInputGroupBox.size();i++){ if(arrayInputGroupBox[i]->title().toUpper().contains(cmd.toUpper())>0){ iterPosQGroupBox = mapPosQGroupBox.find(arrayInputGroupBox[i]->title().toUpper()); if(iterPosQGroupBox.key().length()>0){ myDebugMsg(iterPosQGroupBox.key()+" pos y->"+QString::number(iterPosQGroupBox.value())); QScrollBar *scrollBary = ui->scrollAreaInput->verticalScrollBar(); //scrollBary->setValue(iterPosQGroupBox.value()-9); //定时器,//动画效果 QTimer *timer = new QTimer(this); int _pos = iterPosQGroupBox.value()-9; connect(timer,&QTimer::timeout,this,[=]() mutable{ if((_pos)>posCurrentInput){ posCurrentInput += 2; if((_pos)<posCurrentInput)timer->stop(); scrollBary->setValue(posCurrentInput); } else if((_pos)<posCurrentInput){ posCurrentInput -= 2; if((_pos)>posCurrentInput)timer->stop(); scrollBary->setValue(posCurrentInput); }else { timer->stop(); } }); timer->start(1); } break; } }