在日常工作中,我们经常会遇到这样的问题,界面显示区域就这么大,而我们需要在这个界面上显示的区域却比界面大的多,这个时候我们就会寻找一些方法,让界面能够拖动,就能够在外界条件限制的情况下实现我们的需求。
这种方式是我们最常见的,也是比较常用的一种方法。
Qt中对这些的支持,QMainWindow控件能够自带,但是我们最常用的QWidget控件却默认不支持,这样我们就需要在QWidget上寻求一些突破口。
目前能够知道的是有两种方法:
1、Qt中QScrollArea实现了这种方式,使用也是比较方便,实现过程就是我们需要在父类中先创建一个QScrollArea类的对象,然后将我们需要拖动的QWidget放在这个对象里面,就能够很方便的托动,拖动的这个
滚动条实际上是QScrollArea类中的滚动条,这种方式的实现网上资料比较多,就不做什么解释。
2、使用QScrollBar类和QWidget合作,将QScrollBar拖动时的数值通过换算来移动QWidget同样的距离也能够实现接下来我们来看下这种方式的实现。
首先在QtDesigner中拖曳一个QWidget和一个QScrollBar(使用水平还是垂直根据自己的喜好确定),为了能够比较友好的显示效果,最好QWidget设置比较明显的背景或者标志,这样在后续就能够直接看到效果。然后实现QScroolBar的信号槽,
信号槽的实现有多种方式就不做解释。
接下来看下槽函数的实现:
void Widget::slot_horizontBarValueChange(int nValue)
{
double dOffSet = static_cast<double>(nValue) / static_cast<double>(ui->horizontBar->maximum());
ui->widgetMove->move(-(ui->widgetMove->width() - 350) * dOffSet, 0);
}
看上面的函数,我们首先是获取了偏移的比例dOffSet,然后移动了QWidget,移动的距离-(ui->widgetMove->width() - 350) * dOffSet; 其中负号代表方向, 350 表示目前界面已经显示了的大小(宽或高)。
为了整个效果看起来比较和谐,我们可以提前设定QScrollBar的最大值,然后通过比较合适的比例来确定移动的距离。具体怎么样还需要各位自己摸索,毕竟只有自己参与了,学到的才是自己的知识。
目前没有效果,后续有机会再添加。