【QT】窗口|菜单栏|菜单项|工具栏|状态栏|浮动窗口
目录
编辑
QT窗口
窗口分类
菜单栏
创建菜单栏,菜单,菜单项
菜单栏
菜单
菜单项
添加分割线
添加槽函数
编辑
添加快捷键
工具栏
停靠位置
浮动属性
移动属性
添加快捷项
编辑
状态栏
编辑
添加标签
添加进度表
编辑
浮动窗口
编辑 添加元素
编辑
编辑
QT窗口
通过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);//添加一段实时消息到状态栏中,持续时间为2sstbar->showMessage("我是状态栏",2000);
}
当然,也可以添加其它widget空间,来达到"永久消息"的效果,比如添加label标签
QLabel* label = new QLabel("我是标签",stbar);//将标签放入状态栏中stbar->addWidget(label);
添加进度表
//添加一个进度widgetQProgressBar* 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);
}