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