上几篇文章我们使用 QMainWindow 添加了菜单栏、工具栏、状态栏等控件,他们分别在窗口中起到不同的作用。但千万别忽略了中间位置,因为中间位置是我们用来添加其他控件的位置,如果你直接在对象中new了某些其他控件(比如一个button),那么这个控件会覆盖菜单栏导致不能正常显示。这就需要我们来创建一个中心部件,以保证各个控件之间不会冲突。
#include "cmainwindow.h" #include <QMenuBar> #include <QDebug> #include <QToolBar> #include <QStatusBar> #include <QTableView> #include <QPushButton> CMainWindow::CMainWindow(QWidget *parent) : QMainWindow(parent) { // 创建一个菜单栏 QMenuBar* pMenuBar = menuBar(); // 给菜单栏增加一个主菜单 File QMenu* menuFile = pMenuBar->addMenu("&File"); /* * 给 File 下增加子菜单 * 第一个参数:图标 * 第二个参数:显示文字 * 第三个参数:由谁(哪个对象)来处理他的功能 * 第四个参数:处理的槽函数(后面再介绍) * 第五个参数:快捷键 */ QAction* newAction = menuFile->addAction(QIcon(QPixmap("d:\\qt-logo.png")), "&New", this, SLOT(slotNew()), QKeySequence(tr("CTRL+N"))); menuFile->addAction("&Open"); menuFile->addAction("&Save"); // 插入分隔符 menuFile->addSeparator(); menuFile->addAction("&Exit"); // 给菜单栏增加一个主菜单 File QMenu* menuHelp = pMenuBar->addMenu("&Help"); menuHelp->addAction("&About"); // 添加一个工具栏 QToolBar* toolBar = addToolBar("toolBar"); // 用工具栏的返回值来初始化工具栏子项 toolBar->addAction(newAction); // 添加状态栏 QStatusBar* status = statusBar(); // 给状态栏添加一个label用来显示文字 _label 是成员变量,可以在对象中其他的位置修改它的值 status->addWidget(_label = new QLabel("就绪")); // 设置中心部件 QTableView* view = new QTableView; setCentralWidget(view); // 设置 button 的父窗口是 view QPushButton* button = new QPushButton("Button", view); } void CMainWindow::slotNew() { qDebug() << "slotNew..."; // 修改状态栏的值 _label->setText("新建"); }