Menubar仅在使用Qt5的MacOS上的应用程序/桌面切换后显示
使用以下示例代码,启动应用程序时,不会显示使用Qt 5.3.2的MacOS 10.9.5上的本机菜单。前一个菜单仍然可见,但不能使用此工具栏执行任何操作。如果我切换到另一个应用程序或另一个桌面,此应用程序的菜单将按预期显示并可用。Menubar仅在使用Qt5的MacOS上的应用程序/桌面切换后显示
我的问题是几乎一样的下列之一,但答案不适合我的代码工作:
还有另外一个非常类似的问题在这里,我已经根据修改我的代码建议的答案,但它不工作之一:
MenuBar Not Showing for Simple QMainWindow Code, Qt Creator Mac OS
#include <QtGui>
#include <QtWidgets>
class MainWindow : public QMainWindow
{
public:
MainWindow();
private:
void create_actions_();
void create_menus_();
void about_();
void dummy_();
QMenuBar* menu_bar_;
QMenu* file_menu_;
QMenu* help_menu_;
QAction* action_about_;
QAction* action_dummy_;
};
MainWindow::MainWindow()
{
resize(800, 600);
create_actions_();
create_menus_();
}
void MainWindow::create_actions_()
{
action_about_ = new QAction(tr("About"), this);
action_dummy_ = new QAction(tr("Dummy"), this);
connect(action_about_, &QAction::triggered, this, &MainWindow::about_);
connect(action_dummy_, &QAction::triggered, this, &MainWindow::dummy_);
}
void MainWindow::create_menus_()
{
menu_bar_ = new QMenuBar(this);
file_menu_ = new QMenu(tr("&File"));
file_menu_->addAction(action_dummy_);
menu_bar_->addAction(file_menu_->menuAction());
help_menu_ = new QMenu(tr("&Help"));
help_menu_->addAction(action_about_);
menu_bar_->addAction(help_menu_->menuAction());
menu_bar_->setNativeMenuBar(true);
}
void MainWindow::about_()
{
QMessageBox::about(this, tr("About"), tr("FooBar"));
}
void MainWindow::dummy_()
{
QMessageBox::about(this, tr("Dummy"), tr("Dummy"));
}
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow main_window;
main_window.show();
return app.exec();
}
我我真的很抱歉,我再次提出同样的问题,但我不允许作为新手提出任何意见(坦率地说,这太吸引人了!)。
编辑: 我使用以下CMake的文件来构建测试项目:
cmake_minimum_required(VERSION 2.8.12)
project(testproject)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
find_package(Qt5Widgets)
add_executable(testapp main.cpp mainwindow.h mainwindow.cpp)
target_link_libraries(testapp Qt5::Widgets)
我做了几个修改你的语法。但我认为最大的问题可能是您的类实现与main()相同。我相信这会导致为信号/插槽机制创建的元码产生问题。
这个工作对我来说:
的main.cpp
#include <mainwindow.h>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow main_window;
main_window.show();
return app.exec();
}
mainwindow.h
#include <QApplication>
#include <QtGui>
#include <QObject>
class MainWindow : public QMainWindow
{
// NOTICE THIS MACRO
Q_OBJECT
//
public:
MainWindow();
public slots:
void dummy();
void about();
private:
void create_actions_();
void create_menus_();
QMenuBar* menu_bar_;
QMenu* file_menu_;
QMenu* help_menu_;
QAction* action_about_;
QAction* action_dummy_;
};
mainwindow.cpp
#include <mainwindow.h>
MainWindow::MainWindow()
{
resize(800, 600);
create_actions_();
create_menus_();
}
void MainWindow::about()
{
QMessageBox::about(this, tr("About"), tr("FooBar"));
}
void MainWindow::dummy()
{
QMessageBox::about(this, "Dummy", "Dummy");
}
void MainWindow::create_actions_()
{
action_about_ = new QAction("About", this);
action_dummy_ = new QAction("Dummy", this);
connect(action_about_, SIGNAL(triggered()),
this, SLOT(about()));
connect(action_dummy_, SIGNAL(triggered()),
this, SLOT(dummy()));
}
void MainWindow::create_menus_()
{
menu_bar_ = new QMenuBar(this);
file_menu_ = new QMenu("&File");
file_menu_->addAction(action_dummy_);
menu_bar_->addMenu(file_menu_);
help_menu_ = new QMenu("&Help");
help_menu_->addAction(action_about_);
menu_bar_->addMenu(help_menu_);
}
谢谢您的回答,但不幸的是您的代码无法正常工作。你用Qt5测试过吗?似乎包含到QMainWindow的内容已丢失。在Qt5中,这个位于QtWidgets中,并且包含QtGui已经不够了。 – kingofthehill3 2014-09-25 20:46:20
你说得对。我使用Qt 4.8.6构建这个。这应该不重要,但是,您是否复制粘贴并包含QMainWindow?你能链接你的.pro文件吗? – DaveyLaser 2014-09-25 21:47:18
你可以重新发布CMake吗?不用担心代码块。 – DaveyLaser 2014-09-25 22:52:57
我有一个明显的问题,但没有反应的菜单栏upo在QtCreator中启动时启动应用程序。当将焦点转移到另一个应用程序,然后返回时,菜单栏将会起作用。另外,当从终端运行时立即可以。我的问题是编译后创建的Mac“.app”包在自定义目录中,所以我必须在QtCreator Project-> Run-> Working Dir中设置:/my/custom/path/MyProgram.app/Contents/MacOS ,菜单栏运行良好。这是Qt 5.5.1和OSX 10.11。
我有类似的问题,你解决了这个问题吗? – fghj 2016-05-06 12:44:08
我也使用Qt 5.6.2和OSX 10.11.6。任何信息赞赏。 – tsh 2016-11-19 22:45:26