一、QT主窗体结构介绍
QMainWindow是一个为用户提供主窗口程序的类。
包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状
态栏(status bar)及一个中心部件(central widget),是许多应用程序(如文本编辑器、图片编辑器
等)的基础。
主窗口界面布局:
二、菜单栏(QMenu)
菜单是一系列命令的列表。为了实现菜单、工具栏按钮、键盘快捷方式等命令的一致性,Qt使用动作
(Action)来表示这些命令。
Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口
标题栏的下面。
一个主窗口只能有一个菜单栏。
在MainWindow中创建菜单栏:
void MainWindow::initMenu()
{
//获取主窗口的菜单栏(QMenuBar),然后添加一个菜单选项,返回指向该菜单的指针对象;
QMenu *menu = this->menuBar()->addMenu("Menu1");
//添加子选项(QAction)
menu->addAction(tr("act1"));
menu->addAction(tr("act2"));
menu->addAction(tr("act3"));
运行效果:
三、状态栏(QStatusBar)
状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的底部。
用户可以在状态栏上添加、使用Qt窗口部件。
一个主窗口只能有一个状态栏。
在MainWindow中设置状态栏:
//添加子菜单(QMenu)
QMenu *subMenu = menu->addMenu("SubMenu");
//子菜单添加选项
subMenu->addAction(tr("act1"));
subMenu->addAction(tr("act2"));
subMenu->addAction(tr("act3"));
}
void MainWindow::initStatusBar()
{
//获取主窗口的状态栏
QStatusBar *bar = this->statusBar();
//设置状态栏的提示信息
bar->setToolTip(tr("QStatusBar-ToolTip"));
//设置状态栏的提示消息,若设置第二个参数,则在超时后提示消失。默认一直显示。
bar->showMessage(tr("showMessage"),1000);
//在状态栏添加一个文本标签,如果设置了showMessage,那么这个控件不会显示
QLabel *label = new QLabel("QStatusBar");
bar->addWidget(label);
//在状态栏尾部添加一个行编辑器
QLineEdit *edit = new QLineEdit;
//设置行编辑器的预留提示信息
edit->setPlaceholderText(tr("QStatusBar"));
bar->addPermanentWidget(edit);
}
运行效果:
四、工具栏(QToolBar)
工具栏是由一系列的类似于按钮的动作排列而成的面板,它通常由一些经常使用的命令(动作)组成。
工具栏位于菜单栏的下面、状态栏的上面,可以停靠在主窗口的上、下、左、右四个方向上。
一个主窗口可以包含多个工具栏。
在MainWindow中创建工具栏:
工具栏可以通过下面代码设置按钮的显示样式:
枚举类型说明
枚举类型:Qt::ToolButtonStyle
void MainWindow::initToolBar()
{
//新增一个状态栏
QToolBar *toolBar = this->addToolBar(tr("ToolBar"));
//设置状态栏可以放置的区域
toolBar->setAllowedAreas(Qt::BottomToolBarArea);
//设置状态栏是否可以脱离主窗体进行显示
toolBar->setFloatable(true);
//设置状态栏是否可以被移动
toolBar->setMovable(false);
//新增一个现有的QAction对象
toolBar->addAction(act1);
//添加一个分隔符
toolBar->addSeparator();
//新增一个新的QAction对象
toolBar->addAction(tr("new Action"));
}
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
名称值说明
Qt::ToolButtonIconOnly0只显示图标(默认)
Qt::ToolButtonTextOnly1只显示文字
Qt::ToolButtonTextBesideIcon2显示图标和文字,文字在图标的旁边
Qt::ToolButtonTextUnderIcon3显示图标和文字,文字在图标的下边
Qt::ToolButtonFollowStyle4参照主样式
枚举值:
运行效果:
五、锚接部件(QDockWidget)
锚接部件作为一个容器使用,以包容其他窗口部件来实现某些功能。
例如,Qt设计器的属性编辑器、对象监视器等都是由锚接部件包容其他的Qt窗口部件来实现的。
它位于工具栏区的内部,可以作为一个窗口自由地浮动在主窗口上面,也可以像工具栏一样停靠在主窗
口的上、下、左、右四个方向上。
一个主窗口可以包含多个锚接部件。
在MainWindow中创建锚接部件:
运行效果:
void MainWindow::initDockWidget()
{
//创建QDockWidget对象
QDockWidget *dock = new QDockWidget();
//创建一个QLabel对象
QLabel *label = new QLabel(tr("QDockWidget"));
//将QLabel对象作为QDockWidget的内部控件
dock->setWidget(label);
//将QDockWidget对象添加到主窗体的右侧
this->addDockWidget(Qt::RightDockWidgetArea,dock);
}
六、中心部件
中心部件处在锚接部件区的内部、主窗口的中心。
一个主窗口只能有一个中心部件。
在MainWindow中设置中心区域:
运行效果:
void MainWindow::initCenterWidget()
{
//创建中心区域窗体,此处以QLabel为例
QLabel *centerLabel = new QLabel(tr("Center Widget"));
//设置文本居中显示
centerLabel->setAlignment(Qt::AlignCenter);
//设置主窗体的中心区域窗体
setCentralWidget(centerLab