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

QStackedWidget connect QActions to custom QGraphicsView of QWidget

我用 QStackedWidgetQMenuBar 制作了 MainWindow。 我的一个小部件包含一个 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);

我为 DrawingView 试过这个,但我知道它只是创建了一个新的 DrawingView,而不是使用 Draw ui。

drawView = new DrawingView();
connect(ui->actionZoom_In, &QAction::triggered, drawView, &DrawingView::zoomIn);
connect(ui->actionZoom_Out, &QAction::triggered, drawView, &DrawingView::zoomOut);

我也试过这个,它在 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);

有关如何从 MainWindow 连接或如何访问第二个小部件中 MainWindow ui 的任何帮助。

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

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

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

并且在绘图中 class:

void Drawing::zoomIn() {
    ui->graphicsView.zoomIn();
}

第三个选项是

  • 从 MainWindow
  • 发出自定义 zoomIn 信号
  • 使主要 window 可供绘图访问(例如,将其传递给构造函数或创建全局 mainWindow 单例)
  • 并直接在绘图中进行连接