2013-08-25 68 views
4

我正在使用OpenCV和Qt 5.我需要将鼠标回调传递给namedwindow,以进行一些我正在做的工作。但是,我无法看到我的课程的任何私有成员变量。朋友函数未声明的标识符

下面是一些代码:

class testWizard : public QWizard 
{ 
    Q_OBJECT 


    public: 
    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); 
} 

} 

我不知道我做错了。我很确定这是宣布这一点的正确方法。它告诉我,预览和拖动都是未声明的标识符。不幸的是我需要这样做,因为我需要访问私有成员,并且传递一个指向成员函数的指针是不可能的,因为隐藏了这个参数。

任何人都可以帮忙吗?谢谢!

回答

3

随着friend声明你的函数将有权访问testWizard对象的成员。但是,您仍然需要提供一个对象或指向这样一个对象来访问的变量:

testWizard* wizard = getTestWizard(); // no idea how to do that 
if(event == CV_EVENT_LBUTTONDOWN && !wizard->drag) { ... } 
+0

是啊,谢谢。你是否需要一个没有参数的构造函数,或者你可以使用任何构造函数类型吗? – John

+0

@John:我不知道该框架是如何使用的!您可以将'testWizard'的指针作为'param'参数传递,或者不用注册函数指针,而是可以注册一个包含指向该对象的指针的函数对象。你当然不想构建'testWizard',因为它没有任何特定的值。 –