2014-02-13 122 views
2

我正在使用CMake(不包含MOC)在Qt 5.2.1的Mac OS X 10.9上构建一个简单的C++应用程序。Qt菜单栏未显示

我从命令行启动可执行文件。问题在于菜单栏根本没有显示,终端菜单栏仍然可见,但不可点击。当我暂时切换窗口然后回到这个应用程序的窗口时,我至少可以看到带有“About”的标准“应用程序”菜单。 “关于”操作现在正在工作并显示对话框。工具栏按钮也按预期工作。

还有什么我想(和没有工作):

  • 使用预先定义的menuBar()
  • 使用setMenuBar()
  • new menuBar(0)
  • menubar->setVisible(true)

当我检查isVisible()它返回false,如果我将它设置为可见i之前的行。

我不知道是否缺乏使用MOC可以成为这个原因?

下面我附上一个简化的例子。

#include <QtGui> 
#include <QtWidgets> 


class MainWindow : public QMainWindow { 

public: 

    MainWindow(); 


private: 

    void create_actions_(); 
    void create_menus_(); 
    void create_toolbar_(); 

    void about_(); 

    QMenuBar* menu_bar_; 
    QMenu* file_menu_; 
    QMenu* help_menu_; 

    QToolBar* file_toolbar_; 

    QAction* action_about_; 

}; 



MainWindow::MainWindow() { 
    resize(800, 600); 

    create_actions_(); 
    create_menus_(); 
    create_toolbar_(); 
} 


void MainWindow::create_actions_() { 
    action_about_ = new QAction(tr("About"), this); 
    connect(action_about_, &QAction::triggered, this, &MainWindow::about_); 
} 


void MainWindow::create_menus_() { 

    menu_bar_ = new QMenuBar(this); 

    file_menu_ = menu_bar_->addMenu(tr("&File")); 

    menu_bar_->addSeparator(); 

    help_menu_ = menu_bar_->addMenu(tr("&Help")); 
    help_menu_->addAction(action_about_); 

    menu_bar_->setNativeMenuBar(true); 
} 


void MainWindow::create_toolbar_() { 

    file_toolbar_ = addToolBar(tr("File")); 
    file_toolbar_->addAction(action_about_); 

    file_toolbar_->setIconSize(QSize(16, 16)); 

} 


void MainWindow::about_() { 
    QMessageBox::about(this, tr("About"), tr("FooBar")); 
} 


int main(int argc, char **argv) { 

    QApplication app(argc, argv); 

    MainWindow main_window; 
    main_window.show(); 

    const int exit_code = app.exec(); 
    return exit_code; 
} 

的CMakeLists.txt

FIND_PACKAGE(Qt5Core) 
FIND_PACKAGE(Qt5Gui) 
FIND_PACKAGE(Qt5OpenGL) 
FIND_PACKAGE(Qt5Widgets) 
FIND_PACKAGE(Qt5Declarative) 
FIND_PACKAGE(Qt5MacExtras) 

ADD_EXECUTABLE(main main.cc) 
qt5_use_modules(main Core Gui Widgets Declarative MacExtras) 

非常感谢提前!

+0

你最肯定使用moc,你只是没有使用qmake。 Moc是始终在包含“Q_OBJECT”宏的每个文件上调用的代码生成器。 Cmake为你调用moc。 –

+0

我不使用MOC;因此我也没有使用Q_OBJECT和信号/插槽功能。 – user2970139

回答

2

好的,自己解决了这个问题。看起来你不能在菜单栏中添加分隔符。

删除menu_bar_->addSeparator();解决了这个问题。