主窗口为建立一个程序用户界面提供一个框架,Qt中提供QMainWindow和其他的一些相关的类共同完成主窗口的管理。
- 菜单栏(QMenuBar):包含一个下拉菜单项的列表,菜单栏列表由QAction类实现, (只能有一个菜单栏)
- 工具栏(QToolBar):用于显示一些常用的菜单项目,可以插入其他部件,可以移动 (可以有多个工具栏)
- 中心部件(Central Widget):在中心区域放入一个窗口部件作为中心部件。 (只能有一个中心部件)
- Dock部件(QDack Widget):停靠窗口,可以停靠在四周(可以有多个)
- 状态栏(QStatusBar):显示一些状态信息,在窗口的最底部(只能有一个)
构造函数:
常见的函数:
setMenuBar() | 在主窗中设置菜单栏 |
addMenu() | 在菜单栏中添加菜单 |
addAction() | 在菜单栏中添加菜单项 |
addSeparator() | 添加分隔符 |
clear() | 清除菜单中的所有操作 |
insertMenu() | 插入菜单 |
setTitle() | 设置菜单标题 |
addEnabled() | 动作按钮设置启动和禁用 |
setCornerWidget() | 在最最左侧或最右侧添加一个控件 |
Qt::TopRightCorner | 在最右边 |
Qt::TopLeftCorner | 在最左边 |
addMenu(QMenu*menu) | 将菜单添加到菜单栏,返回菜单的menuAction(),菜单栏不拥有菜单的所有权 |
addMenu(const QString &title) | 将带有标题的新QMEnu附加到菜单栏,菜单栏拥有菜单的所有权,并返回新菜单 |
记事本菜单栏的实现:(为了方便就不创建成员函数了)
创建一个mainWindow的项目。
在mainWindow的构造函数中添加
- resize(1200,800);
- setWindowTitle("记事本");
- QMenuBar *menubar=new QMenuBar(nullptr);
- setMenuBar(menubar);//在窗口中设置菜单栏
- //创建菜单
- QMenu *menu1=new QMenu("文件");
- QMenu *menu2=new QMenu("编辑");
- QMenu *menu3=new QMenu("查看");
- //添加菜单
- menubar->addMenu(menu1);
- menubar->addMenu(menu2);
- menubar->addMenu(menu3);
- //创建文件的菜单项
- QAction *act1_1=new QAction("新建(ctrl+N)");
- QAction *act1_2=new QAction("新建窗口(ctrl+Shift+N)");
- QAction *act1_3=new QAction("打开(ctrl+O)");
- QAction *act1_4=new QAction("保存(ctrl+S)");
- QAction *act1_5=new QAction("另存为(ctrl+Shift+S)");
- QAction *act1_6=new QAction("页面设置");
- QAction *act1_7=new QAction("打印(ctrl+P)");
- QAction *act1_8=new QAction("退出");
- QList<QAction*> listaction1;//创建一个容器,存放QACtion
- listaction1<<act1_1<<act1_2<<act1_3<<act1_4<<act1_5<<act1_6<<act1_7<<act1_8;
- //添加文件的菜单项
- menu1->addActions(listaction1);
-
- //创建编辑的菜单项
- QAction *act2_1=new QAction("撤销(ctrl+Z)");
- QAction *act2_2=new QAction("剪切(ctrl+Shift+N)");
- QAction *act2_3=new QAction("复制(ctrl+O)");
- QAction *act2_4=new QAction("粘贴(ctrl+S)");
- QAction *act2_5=new QAction("删除(ctrl+Shift+S)");
- QAction *act2_6=new QAction("查找");
- QAction *act2_7=new QAction("替换(ctrl+P)");
- QAction *act2_8=new QAction("转到");
- QAction *act2_9=new QAction("全选");
- QAction *act2_10=new QAction("时间和日期");
- QAction *act2_11=new QAction("字体");
- QList<QAction*> listaction2;//创建一个容器,存放QACtion
- listaction2<<act2_1<<act2_2<<act2_3<<act2_4<<act2_5<<act2_6<<act2_7<<act2_8
- <<act2_9<<act2_10<<act2_11;
- //添加编辑的菜单项
- menu2->addActions(listaction2);
-
- //创建查看的菜单项
- QAction *act3_1=new QAction("缩放");
- QAction *act3_2=new QAction("状态栏");
- QAction *act3_3=new QAction("自动换行");
- QList<QAction*> listaction3;//创建一个容器,存放QACtion
- listaction3<<act3_1<<act3_2<<act3_3;
- //添加查看的菜单项
- menu3->addActions(listaction3);
-
- //在最右边添加一个控件
- QPushButton *push=new QPushButton("设置");
- menubar->setCornerWidget(push,Qt::TopRightCorner);//把控件放到最右边
效果展示:
常用的函数:
addToolBar(Qt::ToolBarArea,toolbar) | 添加工具栏,并设置初始位置 |
addAction() | 添加工具项 |
addSeparator() | 添加分隔符 |
clear() | 清除工具栏所有操作 |
insertSeparator(QAction) | 插入分隔符 |
insertWidget() | 添加小部件 |
setAllowedArea() | 设置允许停靠位置 |
allowedArea() | 获取可停靠位置 |
setFloatable(bool) | 设置是否浮动 |
setMovable(bool) | 设置是否能移动 |
Qt::LeftToolBarArea | 放在左边 |
Qt::RightToolBarArea | 放在右边 |
Qt::TopToolBarArea | 放在顶部 |
Qt::BottonToolBarArea | 放在底部 |
Qt::AllToolBarArea | 放在全部位置 |
Qt::NoToolBarArea | 不放在任何位置 |
- //添加工具栏
- QToolBar *toolbar=new QToolBar(this);
- addToolBar(Qt::TopToolBarArea,toolbar);//设置工具栏位置
- toolbar->setAllowedAreas(Qt::AllToolBarAreas);//可以停靠在所有位置
- toolbar->addAction("退出");//添加行为
- toolbar->addSeparator();//添加分隔符
- toolbar->addAction("返回");//添加行为
效果展示:
顶部
左侧
右侧
底部
主窗口的中心区域添加控件:addCentralWidget()
- //中心部件(Central Widget)
- QTextEdit *text1=new QTextEdit(this);//创建以一个文本框
- setCentralWidget(text1);//在中心部件中添加控件
QMdiSubWindow 表示QMdiArea中的顶级窗口,由带有窗口装饰的标题栏、内部小组件以及窗口框架和大小夹点(取决于当前样式)组成。QMdiSubWindow 有自己的布局,该布局由标题栏和内部小部件的中心区域组成。
构造函数:
常见的函数:
addWidget() | 添加控件 |
- //点击新建窗口,生成窗口
- connect(act1_2,&QAction::triggered,[=]()
- {
- QMdiSubWindow *md=new QMdiSubWindow;
- md->setWidget(text1);//设置一个文本输入框
- md->setWindowTitle("文本子窗口");
- md->show();//显示
- });
QDockWidget 提供了停靠小部件的概念,也称为工具选项板或实用程序窗口。停靠窗口是放在QMainWindow中的中央小部件周围的停靠小部件区域中的辅助窗口。
头文件:QDockWidget
构造函数:
addDockWidget() | 在主窗口中添加DockWidget |
setAllowedArea() | 设置可停靠位置 |
setFeatures() | 设置可移动,可关闭,可浮动 |
setFloating() | 设置是否可浮动 |
setWidget() | 设置控件 |
可以一起使用多个用 | 连接
QDockWidget::NoDockWidgetFeatures | 无法关闭、移动或浮动停靠微件 |
QDockWidget::DockWidgetFloatable | 停靠窗口小部件可以与主窗口分离,并作为独立窗口浮动。 |
QDockWidget::DockWidgetMovable | 用户可在停靠点之间移动停靠小部件。 |
QDockWidget::DockWidgetClosable | 可以关闭停靠小部件 |
Qt::LeftDockWidgetArea | 左边 |
Qt::RightDockWidgetArea | 右边 |
Qt::TopDockWidgetArea | 上 |
Qt::BottomDockWidgetArea | 下 |
Qt::AllDockWidgetAreas | 全部位置 |
Qt::NoDockWidgetArea | 自可停靠在插入处 |
把代码添加到项目中:
- //创建浮动窗口
- QDockWidget *dw=new QDockWidget;
- addDockWidget(Qt::RightDockWidgetArea,dw);//把该控件放到最右边
- dw->setWindowTitle("停靠窗口");//设置窗口标题
- dw->setAllowedAreas(Qt::AllDockWidgetAreas);//可以停靠在任意方向
- dw->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetClosable);// 可移动 可关闭
可以停靠在四个方向
头文件:#include
构造函数:
由于mainWidget中包含QStatusBar,所以不用创建
常用的函数:
addWidget() | 添加控件(可以被临时消息遮挡) |
addPermanentWidget() | 将控件永久添加到状态栏(位于最右侧) |
showMessage() | 设置临时信息,可以设置持续时间 |
currentMessage() | 获取临时信息 |
insertPermanentWidget() | 插入永久控件到状态栏 |
insertWidget() | 插入控件到状态栏 |
setSizeGripEnabled(false) | 去掉右下角的三角 |
在项目中添加以下代码:
- //状态栏
- QLabel *lab1=new QLabel("UTf-8");
- QLabel *lab2=new QLabel("Windows(CRLF)");
- QLabel *lab3=new QLabel("行数和列数");
- QLabel *lab4=new QLabel("100%");
- lab1->setFixedSize(100,30);
- lab2->setFixedSize(200,30);
- lab3->setFixedSize(200,30);
- lab4->setFixedSize(200,30);
- ui->statusbar->setSizeGripEnabled(false);//去掉右下角的三角
- ui->statusbar->addPermanentWidget(lab1);
- ui->statusbar->insertPermanentWidget(0,lab2);
- ui->statusbar->addWidget(lab3);
- ui->statusbar->addWidget(lab4);
效果为:
ui->statusbar->showMessage("111111111111111111111",2000);//持续2000毫秒