qt 为什么QMenuBar添加QAction后不显示QAction?
时间: 2024-04-28 12:23:30 浏览: 211
可能有以下几种原因导致QMenuBar添加QAction后不显示:
1. QAction没有设置父对象。QAction必须设置父对象,否则不会在QMenuBar上显示。可以使用setParent()函数或使用QMenuBar的addAction()函数添加QAction。
2. QMenuBar没有设置菜单。在QMenuBar上添加QAction之前,必须先创建一个菜单并将其添加到QMenuBar中。可以使用addMenu()函数添加菜单。
3. QAction被设置为隐藏。如果QAction的setVisible()函数设置为false,它将不会在QMenuBar上显示。确保QAction的setVisible()为true。
如果以上这些方法都不起作用,可以检查一下QMenuBar的样式表是否设置了不正确的属性。
相关问题
qt 为什么QMenuBar添加QWidgetAction后QWidgetAction在QmenuBar右边
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 中添加一个包含 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 的子菜单项。
阅读全文