Я работаю с OpenCV и Qt 5. Мне нужно передать обратный вызов мыши в именованное окно для какой-то работы, которую я делаю. Тем не менее, я не могу увидеть ни одну из закрытых переменных-членов моего класса.
Вот некоторый код:
class testWizard : public QWizard
{
Q_OBJECTpublic:
testWizard();
~testWizard();
friend void mouseHandler(int, int, int, void*);private:
cv::Mat preview;
bool drag;
cv::Rect rect;
};
Функция друга:
void mouseHandler(int event, int x, int y, void* param)
{
cv::Point p1, p2;
if(event == CV_EVENT_LBUTTONDOWN && !drag)
{
p1 = cv::Point(x,y);
drag = true;
}
if(event == CV_EVENT_LBUTTONDOWN && drag)
{
cv::Mat temp;
preview.copyTo(temp);
}
}
Я не знаю, что я делаю не так. Я уверен, что это правильный способ заявить об этом. Это говорит мне, что предварительный просмотр и перетаскивание являются необъявленными идентификаторами. К сожалению, мне нужно сделать это таким образом, так как мне нужен доступ к закрытым членам, и передача указателя на функцию-член невозможна из-за скрытого аргумента this.
Кто-нибудь может помочь? Спасибо!
С friend
Объявление вашей функции будет иметь доступ к членам testWizard
объект. Однако вам все еще нужно предоставить объект или указатель на такой объект для доступа к переменным:
testWizard* wizard = getTestWizard(); // no idea how to do that
if(event == CV_EVENT_LBUTTONDOWN && !wizard->drag) { ... }
Других решений пока нет …