我正在使用CMake(没有MOC)在Mac OS X 10.9上使用Qt 5.2.1构建一个简单的C ++应用程序。
我从命令行启动可执行文件。问题是菜单栏根本没有显示,终端菜单栏仍然可见但不可点击。当我暂时切换窗口然后回到这个应用程序的窗口时,我至少看到带有“关于”的标准“应用程序”菜单。 “关于”操作现在正在运行并显示对话框。工具栏按钮也可以按预期工作。
我尝试了什么(并且没有用):
menuBar()
setMenuBar()
new menuBar(0)
menubar->setVisible(true)
当我检查isVisible()
它返回false时,如果我将它设置为之前的行中可见。
我想知道是否缺乏使用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 :(得分:2)
好的,我自己解决了这个问题。看来您无法在菜单栏中添加分隔符。
删除menu_bar_->addSeparator();
解决了问题。