菜单栏未显示在第二个窗口上

Posted

技术标签:

【中文标题】菜单栏未显示在第二个窗口上【英文标题】:Menubar is not showing on the second window 【发布时间】:2019-07-23 21:57:18 【问题描述】:

我正在尝试构建一个应用程序,在第一个窗口获得一些用户输入后,会弹出另一个窗口并显示一些结果。但是,即使菜单栏在第一个窗口中可见,菜单栏也不会出现在第二个窗口中。这两个窗口是不同类的对象,但两个类都继承自QMainWindow。

我尝试过使用 menuBar() 函数,该函数返回一个指向菜单栏的指针以添加菜单(这适用于第一个窗口)。我还尝试创建一个新的菜单栏对象,但也没有用。

//MapWindow.h

class MapWindow : public QMainWindow

    Q_OBJECT
public:
    explicit MapWindow(QWidget *parent = nullptr);
    ~MapWindow();
private:
    QAction *vehicleAct;
    QAction *missionAct;
    QAction *backAct;
    QMenu *toolMenu;
;


//MapWindow.cpp

MapWindow::MapWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MapWindow)

    ui->setupUi(this);
    setWindowState(Qt::WindowMaximized);

    vehicleAct = new QAction("Vehicle Selection");
    vehicleAct->setShortcut(Qt::CTRL + Qt::Key_V);

    missionAct = new QAction("Mission Selection");
    missionAct->setShortcut(Qt::CTRL + Qt::Key_M);

    backAct = new QAction("Back");
    backAct->setShortcut(Qt::CTRL + Qt::Key_B);

    toolMenu = menuBar()->addMenu("Tools");
    toolMenu->addAction(vehicleAct);
    toolMenu->addAction(missionAct);
    toolMenu->addAction(backAct);


MapWindow::~MapWindow() 
    delete ui;

当我在同样继承自 QMainWindow 的 WelcomeWindow 类中使用相同的代码时,它可以完美运行。但是,它甚至没有在第二个窗口中显示菜单栏。

【问题讨论】:

我建议您发布一个最小可重现示例,以便您可以在这里获得一些帮助。让它只是一个新项目,这样你就可以确定它可以编译。真的很值得。 你已经创建了一个 QMenu ,它会显示在一个窗口中,改变你的代码架构, @Aleph0 我已尝试在新项目中重现问题,但效果很好,我找不到重现问题的方法。 @VahagnAvagyan 以上不是全部代码。我认为只发布相关的代码会使其更具可读性,因为这只是大项目的一小部分。 【参考方案1】:

我设法找到了问题所在。我的一个小部件(QScrollArea)位于屏幕的左上角,由于某种原因阻止了整个菜单栏的显示。将 QScrollArea 向下移动一点解决了这个问题。

【讨论】:

以上是关于菜单栏未显示在第二个窗口上的主要内容,如果未能解决你的问题,请参考以下文章

PYQT GUI更新和通过Qthread在第二个窗口的QLCD显示器上显示浮点信号不起作用[关闭]

第一个下拉名称选择在第二个下拉列表中显示电子邮件值

在QT中怎么让第二个窗口永远在第一个窗口的正下方

PyQt5如何在第一个窗口关闭时更改第二个窗口

如何使用 PHP 在多个下拉表单数据库中显示相同的记录?

将数据移动到另一个视图控制器,但第二个视图控制器在第一个视图控制器之前加载