我正在 Mac OS X 10.9 上使用 CMake(没有 MOC)使用 Qt 5.2.1 构建一个简单的 C++ 应用程序。
我正在从命令行启动可执行文件。问题是菜单栏根本不显示,终端菜单栏仍然可见但不可单击。当我暂时切换窗口然后返回到该应用程序的窗口时,我至少看到带有“关于”的标准“应用程序”菜单。 “关于”操作现在正在运行并显示对话框。工具栏按钮也按预期工作。
我还尝试过什么(但没有成功):
- 使用预定义的
menuBar()
- 使用
setMenuBar()
新菜单栏(0)
菜单栏->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)
提前非常感谢!
最佳答案
好的,我自己解决了这个问题。看来您无法向菜单栏添加分隔符。
删除 menu_bar_->addSeparator();
解决了问题。
关于c++ - Qt 菜单栏不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21744411/