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;
        }
    }

 

posted @ 2021-03-25 11:37  小城熊儿  阅读(1299)  评论(0编辑  收藏  举报