2015-04-20 3 views
1

Я использую функцию setMouseCallback для извлечения информации о координатах пикселей при каждом событии мыши. Программа, созданная мной, отлично работает, если я использую окна openCV. Точность:C++ QT и OpenCV. setMouseCallBack в QLabel?

image cv :: Mat;

cv::namedWindow("Original", WINDOW_NORMAL); 
cv::imshow("Original", image); 

cv::setMouseCallback("Original", mouseWrapper, NULL); 

где

void esempio::onMouse(int event, int x, int y, int flags, void *param) 
{ 
//--------------------------------------------------------- 
// Code to read the mouse event in the identification of a point 
//--------------------------------------------------------- 
    if (event == CV_EVENT_LBUTTONDOWN) 
     { 
      std::cout << "1: " << x << "," << y << std::endl; 
      pp_m.x=x; 
      pp_m.y=y; 
     } 
} 

void mouseWrapper(int event, int x, int y, int flags, void* param) 
{ 
    esempio * mainWin = (esempio *)(param); 
    mainWin->onMouse(event,x,y,flags,0); 
} 

Теперь я хотел бы использовать тот же код в QLabel, созданный в моем интерфейсе. Я пытался использовать функцию setWindowTitle изменить имя QLabel таким образом:

ui->label_show->setWindowTitle("Test"); 
cv::setMouseCallback("Test", mouseWrapper, NULL); 

, но этот подход, как представляется, не адекватен.

Как я могу указать функции setMouseCallback для работы с нужным QLabel?

Благодаря

ответ

0

Это может быть трудно, потому что:

  • Я не уверен, что ОС с учетом названий дочерних виджетов, и я не уверен, что OpenCV распознает заголовок окна виджета не верхнего уровня;
  • Qt обрабатывает дочерние виджеты внутри и не выставляет их ОС, если это не принуждено сделать это;
  • Самое главное, что OpenCV не сможет вызвать ваш обратный вызов, потому что Qt управляет циклом событий.

Я не понимаю, почему бы не использовать собственные средства Qt для реагирования на события мыши.

Звоните ui->label_show->installEventFilter(this) в конструктор вашей формы и реализуйте виртуальный eventFilter функция. В этой функции вы можете использовать аргумент event для получения типа события и координат мыши (после литья до QMouseEvent).

См. event filters.

+0

Я читал о фильтрах событий, но хотел бы просто узнать, как адаптировать мою функцию к QLabel. Я перейду к событиям Qt! благодаря – Thomas

Смежные вопросы