QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
需要特别说明的一个函数为:
void QMainWindow::setCentralWidget(QWidget * widget);设置某个控件为窗口的核心控件。
一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题栏下面,使用前需要添加头文件
1、创建菜单栏,通过QMainWindow类的menubar()函数获取主窗口菜单栏指针
QMenuBar * menuBar() const
2、创建菜单,调用QMenu的成员函数addMenu来添加菜单
/* 添加一个已创建完毕的菜单项 */
QAction* addMenu(QMenu * menu)
/* 添加一个标题为title的菜单项 */
QMenu* addMenu(const QString & title)
/* 添加一个图标为icon,标题为title的菜单项 */
QMenu* addMenu(const QIcon & icon, const QString & title)
3、创建菜单项,调用QMenu的成员函数addAction来添加菜单项
QAction* activeAction() const
QAction* addAction(const QString & text)
QAction* addAction(const QIcon & icon, const QString & text)
QAction* addAction(const QString & text, const QObject * receiver,
const char * member, const QKeySequence & shortcut = 0)
QAction* addAction(const QIcon & icon, const QString & text,
const QObject * receiver, const char * member,const QKeySequence & shortcut = 0)
4、添加分割线
添加分割线使用的是QMenu类的addSeparator()函数。
示例代码如下:
#include
#include
#include
/* 添加菜单栏 */
QMenuBar* mBar = menuBar();
/*添加文件菜单项*/
QMenu* pFile = mBar->addMenu("文件");
/*添加视图菜单项*/
QMenu* pView = mBar->addMenu("视图");
/*在文件菜单项中添加新建操作*/
QAction*pNew = pFile->addAction("新建");
/*在文件菜单项中添加打开操作*/
QAction*pOpen = pFile->addAction("打开");
/*使用Lambda表达式关联信号与槽*/
connect(pNew,&QAction::triggered,
[=]()
{
qDebug()<<"hhhhhh";
}
);
/* 添加分割线 */
pFile->addSeparator();
主窗口的工具栏上可以有多个工具条,通常采用一个菜单对应一个工具条的的方式,也可根据需要进行工具条的划分,使用前需要添加头文件
1、直接调用QMainWindow类的addToolBar()函数获取主窗口的工具条对象,每增加一个工具条都需要调用一次该函数。
2、在工具条上添加操作,通过QToolBar类的addAction函数添加。
3、使用setAllowedAreas()函数指定停靠区域:
Qt::LeftToolBarArea 停靠在左侧
Qt::RightToolBarArea 停靠在右侧
Qt::BottomToolBarArea 停靠在底部
Qt::TopToolBarArea 停靠在顶部
Qt::AllToolBarAreas 以上四个位置都可停靠
4、使用setMoveable()函数设定工具栏的可移动性
示例代码如下:
/* 为主窗口添加工具条 */
QToolBar* toolBar = addToolBar("工具条");
/* 通过addAction函数在工具条上新加QAction对象 */
toolBar->addAction(pNew);
QPushButton* b = new QPushButton(this);
b->setText("按钮");
/* 通过addWidget函数在工具条上新加按钮b */
toolBar->addWidget(b);
/* 设置工具条只能移动时只能停留在左侧区域,注意初始区域仍在顶部 */
toolBar->setAllowedAreas(Qt::LeftToolBarArea);
/* 设置工具条不可移动 */
toolBar->setMovable(false);
使用状态栏之前需要添加头文件
1、直接调用QMainWindow类的statusBar()函数获取主窗口的状态栏对象,每增加一个工具条都需要调用一次该函数。
2、添加小部件:void addWidget(QWidget * widget, int stretch = 0)
3、插入小部件:int insertWidget(int index, QWidget * widget, int stretch = 0)
4、删除小部件:void removeWidget(QWidget * widget)
示例代码如下:
/* 添加一个状态栏 */
QStatusBar* sBar = statusBar();
/* 新建一个QLabel对象,用于显示文本 */
QLabel* label = new QLabel(this);
label->setText("左侧");
/* 在状态栏从左往右加入该QLabel对象 */
sBar->addWidget(label);
/* 在状态栏从右往左加入QLabel对象 */
sBar->addPermanentWidget(new QLabel("右侧",this));
QLabel* k = new QLabel(this);
k->setText("最左侧");
/* 在最左侧即编号为0的地方加入部件k */
sBar->insertWidget(0,k);
/* 移除状态栏中的label控件 */
sBar->removeWidget(label);
使用浮动窗口需要新加头文件
1、直接调用void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget * dockwidget)函数可以为主窗口新加一个浮动窗口,其中Qt::DockWidgetArea area的可用值如下:
enum DockWidgetArea {
LeftDockWidgetArea = 0x1, //悬浮在左侧
RightDockWidgetArea = 0x2, //悬浮在右侧
TopDockWidgetArea = 0x4, //悬浮在顶部
BottomDockWidgetArea = 0x8, //悬浮在底部
DockWidgetArea_Mask = 0xf,
AllDockWidgetAreas = DockWidgetArea_Mask,
NoDockWidgetArea = 0 //无悬浮框
};
示例代码如下:
/* 创建一个浮动窗口对象 */
QDockWidget* dock = new QDockWidget(this);
/* 将浮动窗口dock添加到主窗口的右侧区域,注意,可以拖动的 */
addDockWidget(Qt::RightDockWidgetArea,dock);