QT如何实现mainwindow点击QMenu打开新页面而不是跳转新页面,且不要使用QAction
时间: 2024-02-09 18:13:13 浏览: 229
要实现该功能,可以在`QMenu`中添加一个`QMenu`,然后在该子`QMenu`的`aboutToShow`信号中创建一个新的窗口,并将其设置为子`QMenu`的`QAction`,最后在子`QMenu`的`triggered`信号中打开该窗口。代码示例如下:
```cpp
// 在MainWindow的构造函数中添加以下代码
QMenu *menu = new QMenu("My Menu", this);
QMenu *subMenu = new QMenu("Open New Window", menu);
connect(subMenu, &QMenu::aboutToShow, this, [=](){
// 创建并设置新的窗口
QWidget *newWindow = new QWidget(subMenu);
subMenu->setDefaultAction(newWindow->windowTitle());
newWindow->show();
});
connect(subMenu, &QMenu::triggered, this, [=](QAction *action){
// 打开子菜单中的窗口
QWidget *window = subMenu->defaultAction()->parentWidget();
window->show();
});
menu->addMenu(subMenu);
QMenuBar *menuBar = new QMenuBar(this);
menuBar->addMenu(menu);
setMenuBar(menuBar);
```
在该代码中,我们创建了一个名为`My Menu`的`QMenu`,并向其中添加了一个名为`Open New Window`的子`QMenu`。然后在子`QMenu`的`aboutToShow`信号中,创建一个新的窗口`newWindow`,并将其设置为子`QMenu`的`defaultAction`,这样子菜单中就会显示该窗口的标题。最后,在子`QMenu`的`triggered`信号中,获取子菜单中的窗口并打开它。
需要注意的是,由于子`QMenu`的`defaultAction`需要设置为窗口的标题,因此需要在创建窗口时设置窗口的标题。
阅读全文