2012-10-21 20 views
6

Czy można utworzyć kilka suwaków i wykonać jedno wywołanie zwrotne dla wszystkich z nich?Wiele suwaków z jednym oddzwanianiem

Tworzę okno, w którym chciałbym ustawić około 10 parametrów. Znacznie lepiej byłoby mieć 1 funkcję zwrotną dla wszystkich zamiast 10 funkcji.

obecnie tworzę potencjometr tak:

cvCreateTrackbar("Var1","Window",&global_var1, 250, changing_var1); 
cvCreateTrackbar("Var2","Window",&global_var2, 250, changing_var2); 

a następnie

void changing_var1(int pos) { 
    global_var1 = pos; 
}  

void changing_var2(int pos) { 
    global_var2 = pos; 
} 

Czy możliwe jest stworzenie jednego wywołania zwrotnego, który byłby Albe zmienić wszystkie parametry zgodnie z którym parametr chcę zmienić ?

+1

nie ma potrzeby przypisywania zmiennych globalnych z wartościami. funkcja już umieściła wartość w global_var1, dlatego bierze wskaźnik. – shanif

Odpowiedz

3

Tak, powinieneś być w stanie to zrobić (przynajmniej z interfejsem C++). Będziesz chciał użyć opcjonalnego pola userData. Poniżej znajduje się mały przykład tego, jak można to osiągnąć:

#include <opencv2/highgui/highgui.hpp> 
#include <iostream> 

using namespace std; 
using namespace cv; 

struct ColorThresholdData 
{ 
    int redHigh; 
    int redLow; 
}; 

enum ColorThresholdType 
{ 
    RED_HIGH, 
    RED_LOW 
}; 

void fooCallback(int value, void* colorThreshold); 

struct ColorThresholdData data; 
int main(int argc, char** argv) 
{ 
    ... 
    createTrackbar("red high", windowName, NULL, 255, fooCallback, new ColorThresholdType(RED_HIGH)); 
    createTrackbar("red low", windowName, NULL, 255, fooCallback, new ColorThresholdType(RED_LOW)); 
    ... 
} 

void fooCallback(int value, void* colorThreshold) 
{ 
    ColorThresholdType* ct = reinterpret_cast<ColorThresholdType*>(colorThreshold); 
    switch(*ct) 
    { 
    case RED_HIGH: 
     cout << "Got RED_HIGH value" << endl; 
     data.redHigh = value; 
     break; 
    case RED_LOW: 
     cout << "Got RED_LOW value" << endl; 
     data.redLow = value; 
     break; 
    } 
} 

Nadzieja, że ​​jest to, czego szukaliśmy :)

Powiązane problemy