Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT事件:从内部嵌套类访问外部类的私有变量 是一个工作C++ C++代码,它只显示鼠标事件的图像。为了实现这些事件,我在MainWindow类中嵌套了一个定制的QGraphicsPixmapItem类。我遇到的问题是从MainWindow::myGraphicsPixmapItem内部类的事件函数中访问和修改MainWindow外部类中的私有变量a。我尝试通过引用或使用friend类传递mainWindow,但失败_C++_Qt_Private_Inner Classes_Friend - Fatal编程技术网

C++ QT事件:从内部嵌套类访问外部类的私有变量 是一个工作C++ C++代码,它只显示鼠标事件的图像。为了实现这些事件,我在MainWindow类中嵌套了一个定制的QGraphicsPixmapItem类。我遇到的问题是从MainWindow::myGraphicsPixmapItem内部类的事件函数中访问和修改MainWindow外部类中的私有变量a。我尝试通过引用或使用friend类传递mainWindow,但失败

C++ QT事件:从内部嵌套类访问外部类的私有变量 是一个工作C++ C++代码,它只显示鼠标事件的图像。为了实现这些事件,我在MainWindow类中嵌套了一个定制的QGraphicsPixmapItem类。我遇到的问题是从MainWindow::myGraphicsPixmapItem内部类的事件函数中访问和修改MainWindow外部类中的私有变量a。我尝试通过引用或使用friend类传递mainWindow,但失败,c++,qt,private,inner-classes,friend,C++,Qt,Private,Inner Classes,Friend,我使用的是来自的事件实现,但也尝试了事件过滤器,但运气不好。谢谢你的帮助 main.cpp 包括主窗口 包括 int main argc,char*argv[] { argv质量应用装置; 主窗口主窗口; mainWindow.show; 返回app.exec; } 主窗口 ifndef主窗口 定义主窗口 包括 包括 包括 包括 包括 包括 类主窗口:公共QMainWindow { Q_对象; 公众: 显式MainWindowQWidget*父项=0; 私人: qgraphicscene*场景;

我使用的是来自的事件实现,但也尝试了事件过滤器,但运气不好。谢谢你的帮助

main.cpp

包括主窗口 包括 int main argc,char*argv[] { argv质量应用装置; 主窗口主窗口; mainWindow.show; 返回app.exec; } 主窗口

ifndef主窗口 定义主窗口 包括 包括 包括 包括 包括 包括 类主窗口:公共QMainWindow { Q_对象; 公众: 显式MainWindowQWidget*父项=0; 私人: qgraphicscene*场景; QGraphicsView*视图; int a;//无法从myGraphicsPixmapItem访问 类myGraphicsPixmapItem; QGraphicsPixmapItem*img; }; endif//main窗口 mainwindow.cpp

包括主窗口 类MainWindow::myGraphicsPixmapItem:public QGraphicsPixmapItem{ 公众: myGraphicsPixmapItemQPixmap:QGraphicsPixmapItempixmap{}; ~myGraphicsPixmapItem{}; 无效mouseReleaseEventQGraphicsSceneMouseEvent*事件{ 检测到qDebugMouse释放!; a=0;//问题 }; 无效鼠标presseventqgraphicscenemouseevent*事件{ 检测到qDebugMouse press!; }; }; MainWindow::MainWindowQWidget*父项:QMainWindowparent { 视图=新的QGraphicsView此视图; 场景=新的Qgraphicscene; 查看->设置场景; setCentralWidgetview; img=new myGraphicsPixmapItemQPixmap:/img.bmp; 场景->添加; } 错误消息

mainwindow.cpp:在成员函数“virtual void mainwindow::myGraphicsPixmapItem::MouseReleaseEventQGraphicsCenemouseeEvent*”中: mainwindow.cpp:9:9:错误:非静态数据成员“mainwindow::a”的使用无效 a=0; ^ 在mainwindow中包含的文件中。cpp:1:0: mainwindow.h:18:13:注:此处声明 INTA; ^
您需要一个MainWindow类的实例来引用它的非静态成员。因此,快速修复方法是创建一个静态:

如果这对您不起作用,那么您可能需要将MainWindow实例传递到myGraphicsPixmapItem构造函数中,并存储指向它的成员指针

class MainWindow::myGraphicsPixmapItem: public QGraphicsPixmapItem {
public:
    myGraphicsPixmapItem(MainWindow *window, QPixmap pixmap)
        : QGraphicsPixmapItem(pixmap),
        m_window(window)
    {}
private:
    MainWindow *m_window;
};

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    img = new myGraphicsPixmapItem(this, QPixmap(":/img.bmp"));
}

谢谢你的回复。我已经尝试过静态int a;它给出了一个错误,未定义对“MainWindow::a”的引用。第二种解决方案是,我不确定MyGraphicsPixMapPixMap-pixmap:QGraphicsPixMapPitemPixMap{};将被修改为用于传入MainWindow实例。这是因为您必须定义静态实例。我将对我的帖子进行编辑。我还添加了一个编辑以显示关于第二个选项的更多详细信息。第一个解决方案给出了新的错误:在“=”令牌int MainWindow::a=0;之前的声明中出现了限定id;。幸运的是,您的第二个解决方案非常有效!注意a=0;还需要更改为m_window->a=0;。这对我很有帮助,谢谢!
class MainWindow::myGraphicsPixmapItem: public QGraphicsPixmapItem {
public:
    myGraphicsPixmapItem(MainWindow *window, QPixmap pixmap)
        : QGraphicsPixmapItem(pixmap),
        m_window(window)
    {}
private:
    MainWindow *m_window;
};

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
    img = new myGraphicsPixmapItem(this, QPixmap(":/img.bmp"));
}