赞
踩
目录
通过QMainWindow类来实现,是一个提供主窗口程序的类
:包含一个菜单栏(menu bar),多个工具栏(tool bars),多个浮动窗口(dock widgets),一个状态栏(status bar)和一个中心部件(central widget)
主窗口(QMainWindow)、对话框(QDialog)或者是一般的窗口部件(QWidget)
- QMainWindow(主窗口):这是QT中最常见的窗口类型,具有菜单栏、工具栏、状态栏和中心区域;
- QDialog(对话框) :用于创建对话框窗口,常用于提示用户输入信息、显示警告或确认操作等场景。
- QWidget(窗口部件):是最基础的用户界面对象,所有可视部件都继承自它。
Qt的菜单栏是通过QMenuBar来实现的,一个主窗口最多只有一个菜单栏,位于主窗口顶部,主窗口标题下的位置;
菜单栏里面包含了菜单,和菜单项;
QMainWindow类本身提供了QMenuBar() (我们创建项目时如果勾选了.ui文件的自动创建),我们不需要在堆上new创建,而且这一方式也会造成本身携带的造成内存泄露:(因为,当我们自己new了挂到树上后,原来的就会脱离对象树,没有对其释放内存。)
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- //利用本身存在menubar 创建菜单栏
- //1.如果 QMenuBar 已经存在,直接获取并返回
- //2.如果 QMenuBar 不存在,就先创建一个新的,再返回
- QMenuBar* menuBar = this->menuBar();
- // QMenuBar* menuBar = new QMenuBar();
-
- //将其设置到窗口上
- this->setMenuBar(menuBar); //如果是获取到已经存在 QMenuBar ,这里的设置就是自己替换自己,仍然在对象树上
- }
创建菜单后,通过QMenuBar的方法 addMenu(QMenu* menu)方法添加菜单到菜单项中;
- //创建菜单 通过addMenu添加到菜单栏中
- QMenu* menu1 = new QMenu("文件");
- QMenu* menu2 = new QMenu("编辑");
- QMenu* menu3 = new QMenu("保存");
-
- //将菜单添加到菜单中
- menuBar->addMenu(menu1);
- menuBar->addMenu(menu2);
- menuBar->addMenu(menu3);
每个菜单项被点击时,触发信号,QAction::triggred ;
利用该信号槽,来设置需要的行为;
- //创建菜单项
- QAction* act1 = new QAction("open");
- QAction* act2 = new QAction("close");
- QAction* act3 = new QAction("create");
-
- //将菜单项添加到菜单上
- menu1->addAction(act1);
- menu1->addAction(act2);
- menu1->addAction(act3);
在菜单项之间添加分割线,QMenu提供的addSeparator();
在菜单项被点击的时候,会触发 triggered 这个信号;
只需要在创建菜单项的时候,菜单项的名字后面加个(&+添加的快捷键即可)
- //创建菜单 通过addMenu添加到菜单栏中
- QMenu* menu1 = new QMenu("文件(&F)");
- QMenu* menu2 = new QMenu("编辑(&E)");
- QMenu* menu3 = new QMenu("保存&S");
-
- //将菜单添加到菜单中
- menuBar->addMenu(menu1);
- menuBar->addMenu(menu2);
- menuBar->addMenu(menu3);
按 ALT + 快捷键 触发快捷键
工具栏是一个集成各种功能实现快捷方式使用的区域,可以有多个或没有。是一个可移动组件,通常以图标按钮形式存在;
QToolBar类提供的setAllowedAreas()函数来设置状态栏的停靠位置。
在创建工具栏的同时,也可以设置工具栏的位置,默认位置是在窗口的最上面;
其中也可以设置的位置包括:
- Qt::LeftToolBarArea停靠在左侧
- Qt::RightToolBarArea停靠在右侧
- Qt::TopToolBarArea停靠在顶部
- Qt::BottomToolBarArea 停靠在底部
- Qt::AllToolBarAreas 以上四个位置都可停靠
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- //创建工具栏
- QToolBar* toolbar1 = new QToolBar(this);
- QToolBar* toolbar2 = new QToolBar(this);
-
- //设置工具栏的停靠位置
- this->addToolBar(Qt::LeftToolBarArea,toolbar1);
- this->addToolBar(Qt::RightToolBarArea,toolbar2);
- }
工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置,
函数原型:void setFloatable(bool floatable);
- //设置浮动属性
- toolbar1->setFloatable(true);
- toolbar2->setFloatable(false);
设置工具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置;
函数原型:void setMovable(bool movable);
- //设置移动属性
- toolbar1->setMovable(false);
- toolbar2->setMovable(true);
- QAction* act1 = new QAction("open",this);
- QAction* act2 = new QAction("close",this);
-
- //添加到工具栏中
- toolbar1->addAction(act1);
- //添加分割线
- toolbar1->addSeparator();
-
- toolbar1->addAction(act2);
状态栏是一个输出简要信息的区域,一般位于主窗口底部,一个窗口只能有一个状态栏;
状态栏通过QStatusBar类来实现,一般可显示的信息类型:
- 实时消息:当前程序状态;
- 永久消息:程序版本号;
- 进度消息:进度条显示,百分形式提示
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- //创建状态栏
- // QStatusBar* stbar = new QStatusBar();
- QStatusBar* stbar = this->statusBar();
-
- //设置于窗口中
- this->setStatusBar(stbar);
-
- //添加一段实时消息到状态栏中,持续时间为2s
- stbar->showMessage("我是状态栏",2000);
- }

当然,也可以添加其它widget空间,来达到"永久消息"的效果,比如添加label标签
- QLabel* label = new QLabel("我是标签",stbar);
- //将标签放入状态栏中
- stbar->addWidget(label);
- //添加一个进度widget
- QProgressBar* progressbar = new QProgressBar(stbar);
- //设置范围和初始值
- progressbar->setRange(0,100);
- progressbar->setValue(25);
- //添加到状态栏中
- stbar->addWidget(progressbar);
浮动窗口时通过QDockWidget类来实现浮动功能,可以有多个
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- //添加浮动窗口
- QDockWidget* dockWidget = new QDockWidget("浮动窗口",this);
-
- //添加浮动窗口到当前主窗口中 在底部
- this->addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
-
- }
要想给浮动窗口内部添加一些控件,需要创建一个单独的 QWidget ,把要添加的控件加入到 QWidget 中,然后再把这个 QWidget 设置到 dockWidget 中。
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
-
- //添加浮动窗口
- QDockWidget* dockWidget = new QDockWidget("浮动窗口",this);
-
- //添加浮动窗口到当前主窗口中 设置在底部
- this->addDockWidget(Qt::BottomDockWidgetArea,dockWidget);
-
- //创建一个 QWidget ,并加入到 dockWidget 中
- QWidget* container = new QWidget();
- dockWidget->setWidget(container);
- //创建一个标签和一个垂直的布局管理器,把布局管理器加入到 Qwidget 中
- //再把控件加入到布局管理器中
- QLabel* label = new QLabel("这是一个标签",this);
- QVBoxLayout* vlayout = new QVBoxLayout();
- container->setLayout(vlayout);
- vlayout->addWidget(label);
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。