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)
非常感謝提前!
你最肯定使用moc,你只是沒有使用qmake。 Moc是始終在包含「Q_OBJECT」宏的每個文件上調用的代碼生成器。 Cmake爲你調用moc。 –
我不使用MOC;因此我也沒有使用Q_OBJECT和信號/插槽功能。 – user2970139