qt 为什么QMenuBar添加QWidgetAction后QWidgetAction在QmenuBar右边
时间: 2024-02-29 09:56:46 浏览: 99
QMenuBar 是一个特殊的菜单栏,它默认只能添加菜单项(QMenu)、分隔符(QAction)和窗口列表(QAction)。如果要在 QMenuBar 上添加 QWidgetAction,需要通过 QWidgetAction 的 `setDefaultWidget()` 方法将其包含的控件设置为一个 QWidget,并将该 QWidget 添加到 QMenuBar 上。这样做的效果是,在 QMenuBar 上会显示一个包含 QWidget 的按钮,单击该按钮会弹出 QWidget。由于 QWidgetAction 包含的是 QWidget,所以它不能被直接添加到 QMenu 中,而是会被放在 QMenuBar 的最右边。如果想要将 QWidgetAction 放在 QMenu 中,需要将 QWidgetAction 包装成 QAction,并将其添加到 QMenu 中。
相关问题
qt 为什么QMenuBar添加QWidgetAction后QmenuBar右边有箭头
QMenuBar 添加 QWidgetAction 后,如果该 QWidgetAction 里面包含有子控件,那么 QMenuBar 右边会显示一个箭头,用于表示该 QWidgetAction 里面还有其它控件。这个箭头是 QMenuBar 的默认行为,无法通过 API 直接控制。如果不想要这个箭头,可以通过自定义 QMenuBar 的样式表来进行控制。具体可以参考 Qt 官方文档中对样式表的介绍。
qt 举个QMenuBar添加QWidgetAction的例子
好的,以下是一个简单的例子,演示如何在 QMenuBar 中添加一个包含 QPushButton 的 QWidgetAction:
```cpp
#include <QtWidgets>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow window;
QMenuBar *menuBar = window.menuBar();
// 创建一个 QAction,并将其设置为 QMenuBar 的 “File” 菜单项
QAction *fileAction = new QAction("File", &window);
QMenu *fileMenu = menuBar->addMenu(fileAction);
// 创建一个 QWidgetAction,并将其设置为 “File” 菜单项的子项
QWidgetAction *widgetAction = new QWidgetAction(&window);
QPushButton *button = new QPushButton("Button");
QWidget *widget = new QWidget();
QHBoxLayout *layout = new QHBoxLayout(widget);
layout->addWidget(button);
widgetAction->setDefaultWidget(widget);
fileMenu->addAction(widgetAction);
window.show();
return app.exec();
}
```
运行程序后,可以看到在 “File” 菜单项的右侧出现了一个箭头,点击箭头后会显示一个包含 QPushButton 的子菜单项。
阅读全文