qt - QStackedWidget 将 QActions 连接到 QWidget 的自定义 QGraphicsView
问题描述
我MainWindow
用 aQStackedWidget
和 a 做了 a QMenuBar
。我的一个小部件包含一个QGraphicsView
我提升为我的自定义QGraphicsView
( DrawingView
) 的小部件。我想将QActions
menuBar 连接到我的 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 的任何帮助。
解决方案
您的问题不只是 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 单例)
- 并直接在绘图中进行连接
推荐阅读
- xmpp - XMPP 协议的“投票”机制
- html - 用于格式化学术出版物 APA 样式的 CSS
- java - TextView.setText(...) 在按钮侦听器内的循环中不起作用
- c# - 将 Wav 转换为 Mp3 - ASP.NET
- php - 具有不同标签数组的 Max()
- reactjs - ASP.NET Core React 模板不适合 TypeScript
- python - Python - 其他字符串中的单词大写
- java - 如何在 CursorAdapter 中获取我当前的 ID?
- algorithm - 生成从 1 到 n 的随机数,在 O(1) 空间中不重复
- powershell - 喷溅和格式化操作员在其他地方工作