使用以下示例代码,启动应用程序时,使用Qt 5.3.2的MacOS 10.9.5上的本机菜单不会显示。前一个菜单仍然可见,但此工具栏无法执行任何操作。如果我切换到另一个应用程序或另一个桌面,此应用程序的菜单将变得可见并可按预期使用。
我的问题几乎与下面的问题相同,但答案对我的代码不起作用:
这里还有另一个非常相似的问题,我已根据建议的答案修改了我的代码,但它也不起作用:
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)
答案 0 :(得分:0)
我对你的语法做了一些修改。但我认为最大的问题可能是你的类实现与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_ );
}
答案 1 :(得分:0)
在QtCreator中启动时,我在应用启动时出现了可见但无响应的菜单栏问题。将焦点更改为另一个应用程序,然后返回时,菜单栏将会正常工作。此外,从终端运行时它立即很好。我的问题是Mac&#34; .app&#34;编译后创建的包在自定义目录中,因此我必须在QtCreator项目中设置 - >运行 - >运行目录:/my/custom/path/MyProgram.app/Contents/MacOS,并且菜单栏工作正常。这是Qt 5.5.1和OSX 10.11。