• 7150阅读
  • 4回复

[提问]菜鸟问题关于QScrollbar [复制链接]

上一主题 下一主题
离线lefteye
 
只看楼主 倒序阅读 楼主  发表于: 2011-07-10
现在在搞一个QScrollArea,当然有horizontalScrollBar()和verticalScrollBar(),要搞个缩略图整体显示当前QScrollArea显示的图片,缩略图上面有个矩形框代表当前可显示的区域

问题:当前scrollbar的值可以从信号valueChanged(int)获得,最大值最小值可以从信号rangeChanged(int, int)获得,但是步长PageStep(当然画矩形框用的着)如何获得?
离线lefteye
只看该作者 1楼 发表于: 2011-07-10
说的不清楚,是画矩形框的时候需要使用上面的值,因为当前窗口可以改变,所以QScrollbar变化时,怎么获得Pagestep?
离线lefteye
只看该作者 2楼 发表于: 2011-07-10
没人吗
最终效果是拖动缩略图的那个小矩形框,右边窗口随之移动;右边窗口移动,小矩形框也动。而且,改变右边窗口缩放比例,小矩形框大小也要改变

可是现在卡在怎么画这个矩形框上了...
求思路
离线lefteye
只看该作者 3楼 发表于: 2011-07-10
  1. connect(scrollArea->horizontalScrollBar(),SIGNAL(rangeChanged(int,int)), this,SLOT(updateHPageStep()));
这个信号槽有木有问题?


。。
槽函数
  1. void MainWindow::updateHPageStep()
  2. {
  3.     int hStep=scrollArea->horizontalScrollBar()->pageStep();
  4.     mapWidget->getHPageStep(hStep);//mapWidget就是左边的缩略图
  5. }



离线lefteye
只看该作者 4楼 发表于: 2011-07-11
好吧,连个挽尊的都没有

想获得可变QScrollbar的step而言,没有直接的信号,上面的方法——就是利用rangechanged信号在对应的槽函数中直接获取Step,经试验,不可行

改进:想不出别的来,只能用笨办法了。在槽函数中自定义一个sigHStepChanged()信号,通过信号传递step

  1. connect(scrollArea->horizontalScrollBar(),SIGNAL(rangeChanged(int, int)),mapWidget,SLOT(getHRange(int, int)));//获取最大最小值
  2. connect(scrollArea->horizontalScrollBar(),SIGNAL(rangeChanged(int,int)),this,SLOT(updateHPageStep()));//在槽函数中自定义一个stepchanged信号
  3.     connect(this,SIGNAL(sigHStepChanged(int)),mapWidget,SLOT(getHPageStep(int)));//在这里讲step传递到mapWidget

  1. void MainWindow::updateHPageStep()
  2. {
  3.     int hStep=scrollArea->horizontalScrollBar()->pageStep();
  4.     emit sigHStepChanged(hStep);
  5. }




快速回复
限100 字节
 
上一个 下一个