QT基础:QMainWindow学习小结

简述

普通的桌面应用程序有个共同的特性,有菜单栏、工具栏、状态栏、中央窗口等部件。菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口。那么这些典型的桌面应用可以认为是一些QWidget的组合,通过QWidget派生的方式也确实能够完成这样的窗口。

 

但是如果每次都自己去设计,重复这些工作,想想都有些麻烦,于是Qt帮我们实现这样的窗口,叫做QMainWindowQMainWindow已经布置好菜单栏、工具栏、状态栏等窗口,我们只需要懂得如何去应用就行了。

QMainWindow的布局

QMainWindow类创建一个主应用程序的窗口,类似于MFC中中的单文档/多文档,其基本布局如下:

    MenuBar是菜单栏,toolbars是工具栏,Dock Widgets是停口窗口,Central Widget是中央窗口,Status Bar是状态栏。中央窗口是必须的,即使它只是一个占位符也必须存在。

创建一个QMainWindow工程

初始化的QMainWindow窗口就具有以下控件:QMenuBar-菜单栏、QToolBar-工具栏、QStatusBar-状态栏

中央窗口

一个中央窗口是一个典型的QT部件,例如QTextEdit或者QGraphicsView,可以自定义部件用于高级应用。可以使用setCentralWidget()函数来设置中央窗口。

主窗口可以是一个单文档或者多文档界面,可以使用QMdiArea作为中心部件。

QMainWindow的中央窗口可以使用QMainWindow::CentralWidget来设置一个QWidget对象或者派生类对象作为主窗口的中央窗口。

QTextEdit * edit = new QTextEdit(this);

this->setCentralWidget(edit);

 

 

菜单

Qt中菜单栏类是QMenuBar,它也是继承至QWidget,菜单栏是一个长条状窗口,可以是横向也可以是纵向的,菜单栏上可以布置菜单。这个大家好像都知道~

可以在QT Designer中添加,菜单栏的Action被点击时会发出triggered()信号,然后在代码中将之和槽函数连接起来,便实现了一个一个功能。

采用Qt Designer设计UI界面时,在编辑菜单时,输入菜单名称前面需要加"&",例如在菜单栏添加菜单"File"时,需要双击"在此处输入"的地方输入"&File",并且按下"Enter"键,这样才能保证File创建成功。

新建好后,在下面建立子菜单"New"

"Action Editor"中右键,选择"转到槽"…

 选择"triggered()"信号,点击[OK]…

 

通过QMainWindow::MenuBar() 来获取一个QMenuBar对象的指针, 如果该对象不存在, 就新建一个对象。

可以通过new一个QMenuBar对象,然后通过QMainWindow::setMenuBar来设置主窗口的菜单栏。

创建完菜单栏之后,就可以在菜单栏上面布置菜单了,菜单类叫作QMenuQMenu也是继承至QWidget

菜单中的诸如打开、保存、关闭等,都是一个个动作,在Qt里面对应的类是QAction,它不是窗口类,它是继承至QObject。可以使用QMenu::addAction来添加动作,QMenu::addAction有多个重载的函数,都是返回一个新建的QAction对象。

分隔符可以起到修饰的作用,使用QMenu::addSeparator()添加分割符号。

工具栏

工具栏类是QToolbarQToolbar对象中可以布置一些QAction动作,QToolbar继承至QWidget,主窗口可以使用QMainWindow::addToolBar来添加工具栏。

采用Qt Designer设计UI界面时,在编辑工具栏时,现在"Action Editor"中新建Action,然后将新建好的Action拖动到Toolbar上面去即可。

状态栏

Qt中的状态栏类是QStatusBar,也是继承至QWidget,状态栏用来显示程序的运行状态,比如"就绪、编辑中"。

QStatusBar::showMessage函数可以用来设置状态栏的显示信息

ui->statusBar->setSizeGripEnabled(false);

ui->statusBar->showMessage(tr("临时信息!"), 2000);

 

停靠窗口

Qt中停靠窗口类为QDockWidgetQDockWidget继承至QWidget,这种窗口可以停靠在主窗口的停靠区域。

QDockWidget*dock= new QDockWidget("dock", this);

QTextEdit*edit= new QTextEdit("dock", dock);

dock->setWidget(edit);

this->addDockWidget(Qt::LeftDockWidgetArea, dock);

 

posted on 2019-01-28 17:12  我来乔23  阅读(1133)  评论(0编辑  收藏  举报

导航