2014-02-13 168 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();解決了這個問題。