轨道条使用方法

来源:互联网 发布:苹果换三星 数据转移 编辑:程序博客网 时间:2024/04/29 10:50

注明:这篇文章是在看了opencv教程第6节之后的总结,函数调用流程第一次接触,而且比较诡异复杂,方便回顾。


创建轨道条的函数

createTrackbar(const string& trackbarName,const & winName,int * value,int count ,TrackbarCallback onchange=0,void * userdata =0);


第一个参数是轨道条的名字

第二个参数是依附窗口的名字

第三个参数是滑块的位置,可以用&全局变量

第三个参数是滑块的最大值,最小值均为0

第四个参数是回调函数的指针,onchange的默认为0,回掉函数的形式应该是void XXX(int,void*)其中第一个参数是轨道条的位置,第二个参数是userdata可以参见第五个参数,如果在这里保持默认值0,那么第五个参数可以不用处理了

第五个参数是userdata,这里如果是全局变量的话,对于第四个参数中回调的第二个参数不用处理(这里搞不懂,我的处理方式就是按照案例中,只要把第五个参数省略,然后调用回调的时候第二个参数传入0就可以了,看下面的例子)


这里的例子分为三块:主函数里的,全局变量里的,回调函数。


//全局变量

int value=5;

int max=10;


//主函数

int main(){

createTrackbar("nameOfWindow","nameOfParents",&value,10,on_tracjbar);//这里做了一个新窗口名字为nameOfWindow的轨道条,依附在nameOfWindow的窗口上,当//前值为全局的value,最大值为10,变化时触发回调函数on_trackbar

on_trackbar(value,0);//这里给出了on_trackbar的实现,注意第二个参数直接给0,则上面一行代码的最后一个参数不用处理了

}


//回掉函数

static void on_trackbar(int,void*){//这里是一个静态函数

//针对 value的值进行处理,并针对不同的value做不同的事情

//这里有函数体

}


用法就是这样。

存在的问题是,这里的静态函数是声明还是函数的定义,在createTrackbar之后,为什么要再加上一句具体的on_trackbar语句把vaue和0传进去。


0 0