QStackedWidget 将 QActions 连接到 QWidget 的自定义 QGraphicsView
QStackedWidget connect QActions to custom QGraphicsView of QWidget
我用 QStackedWidget
和 QMenuBar
制作了 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 单例)
- 并直接在绘图中进行连接
我用 QStackedWidget
和 QMenuBar
制作了 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 发出自定义
- 使主要 window 可供绘图访问(例如,将其传递给构造函数或创建全局 mainWindow 单例)
- 并直接在绘图中进行连接
zoomIn
信号