首页 > 解决方案 > QStackedWidget 将 QActions 连接到 QWidget 的自定义 QGraphicsView

问题描述

MainWindow用 aQStackedWidget和 a 做了 a QMenuBar。我的一个小部件包含一个QGraphicsView我提升为我的自定义QGraphicsView( DrawingView) 的小部件。我想将QActionsmenuBar 连接到我的 custom 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 的任何帮助。

标签: qtqt5qgraphicsviewqactionqstackedwidget

解决方案


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

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

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

在绘图类中:

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

第三种选择是

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

推荐阅读