Qt QStackedWidget将QActions连接到QWidget的自定义QGraphicsView

Qt QStackedWidget将QActions连接到QWidget的自定义QGraphicsView,qt,qt5,qgraphicsview,qaction,qstackedwidget,Qt,Qt5,Qgraphicsview,Qaction,Qstackedwidget,我用QStackedWidget和QMenuBar制作了一个main窗口。 我的一个小部件包含一个QGraphicsView,我将其升级为我的自定义QGraphicsView(DrawingView)。 我想将菜单栏中的QActions连接到我的自定义DrawingView 我设法使连接到小部件的QActions正常工作,但我不知道如何从DrawingView访问这些方法 这是我用于其他QActions的代码: draw = qobject_cast<Drawing*>(ui-&g

我用
QStackedWidget
QMenuBar
制作了一个
main窗口。
我的一个小部件包含一个
QGraphicsView
,我将其升级为我的自定义
QGraphicsView
DrawingView
)。 我想将菜单栏中的
QActions
连接到我的自定义
DrawingView

我设法使连接到小部件的
QActions
正常工作,但我不知道如何从
DrawingView
访问这些方法

这是我用于其他
QActions
的代码:

draw  = qobject_cast<Drawing*>(ui->stackedWidget->widget(1));
connect(ui->actionOpen, &QAction::triggered, draw, &Drawing::openPhoto);
connect(ui->actionSave, &QAction::triggered, draw, &Drawing::saveFile);
connect(ui->actionExit, &QAction::triggered, draw, &Drawing::close);
我也尝试过这个,在ui->stackedWidget->widget(1)->graphicsView上出现了一个错误:

drawView = qobject_cast<DrawingView*>(ui->stackedWidget->widget(1)->graphicsView); //also tried (ui->stackedWidget->widget(1)->ui->graphicsView)
connect(ui->actionZoom_In, &QAction::triggered, drawView, &DrawingView::zoomIn);
connect(ui->actionZoom_Out, &QAction::triggered, drawView, &DrawingView::zoomOut);
drawView=qobject\u cast(ui->stackedWidget->widget(1)->graphicsView)//也尝试过(ui->stackedWidget->widget(1)->ui->graphicsView)
连接(ui->actionZoom_In,&QAction::triggered,drawView,&DrawingView::zoomIn);
连接(ui->actionZoom_Out,&QAction::triggered,drawView,&DrawingView::zoomOut);

关于如何从主窗口连接或如何在第二个小部件中访问主窗口的ui的任何帮助。

您的问题不在于graphicsView是包含小部件的私有成员吗

您可以将其设置为公共成员或添加包装函数:

auto draw  = qobject_cast<Drawing*>(ui->stackedWidget->widget(1));
connect(ui->actionZoom_In, &QAction::triggered, draw, &Drawing::zomIn);
第三种选择是

  • 从主窗口发出自定义的缩放信号
  • 使图形可以访问主窗口(例如,将其传递给构造函数或创建全局主窗口单例)
  • 并在图形中直接进行连接

请考虑发布确切的错误消息。另外,a将非常有助于进一步帮助您。<代码>绘图<代码> > <代码> DrawingView < /代码>?从C++中设置您的UI(部分)可能更容易。它可以让您更好地控制如何访问特定类。或者您可以尝试在Qt Designer中管理连接。第一个选项对我来说非常适合。非常感谢你。
auto draw  = qobject_cast<Drawing*>(ui->stackedWidget->widget(1));
connect(ui->actionZoom_In, &QAction::triggered, draw, &Drawing::zomIn);
void Drawing::zoomIn() {
    ui->graphicsView.zoomIn();
}