44 应用程序主窗口

应用程序主窗口一般包含以下几个部分

  • 菜单栏(QMenuBar)
  • 工具栏 (QToolBar)
  • 中心部件
  • Dock部件 (QDockWidget)
  • 状态栏(QStatusBar)

主窗口框架

①菜单栏(QMenuBar)。菜单栏包含了一个下拉菜单项的列表,这些菜单项由QAction动作类实现。菜单栏位于主窗口的顶部,一个主窗口只能有一个菜单栏。

②工具栏(QToolBar)。工具栏一般用于显示一些常用的菜单项目,它也可以插入其他窗口部件,并且工具栏是可以移动的。一个主窗口可以拥有多个工具栏。

③中心部件(Central Widget)。在主窗口的中心区域可以放入一个窗口部件作为中心部件,它是应用程序的主要功能实现区域。一个主窗口只能拥有一个中心部件。

④Dock部件(QDockWidget)。Dock部件常被称为停靠窗口,因为它可以停靠在中心部件的四周。它用来放置一些部件来实现一些功能,就像个工具箱一样。一个主窗口可以拥有多个Dock部件。

⑤状态栏(QStatusBar)。状态栏用于显示程序的一些状态信息,它在主窗口的最底部。一个主窗口只能拥有一个状态栏。

在设计器中给菜单栏、工具栏添加动作

  在Qt Creator中新建Qt Widgets应用,类名默认为MainWindow,基类默认为QMainWindow不做改动。建立好项目后,在文件列表中双击mainwindow.ui文件进入设计模式。

添加菜单,双击左上角的“在这里输入”,修改为“文件(&F)”,这里要使用英文半角的括号,“&F”被称为加速键,表明程序运行时,可以按下Alt+F键来激活该菜单。修改完成后,按下回车键,并在弹出的下拉菜单中,将第一项改为“新建文件(&N)”并按下回车键。

这时可以看到在下面的Action编辑器中已经有了“新建文件”动作。

在这里用鼠标点击该动作,将其拖入菜单栏下面的工具栏中。

菜单栏

QMenuBar类提供了一个水平的菜单栏,在QMainWindow中可以直接获取它的默认存在的菜单栏,向其中添加QMenu类型的菜单对象,然后向弹出菜单中添加QAction类型的动作对象。

在QMenu中还提供了间隔器,可以在设计器中向添加菜单那样直接添加间隔器,或者在代码中使用addSeparator()函数来添加,它是一条水平线,可以将菜单分成几组,使得布局很整齐。

在应用程序中很多普通的命令都是通过菜单来实现的,而我们也希望能将这些菜单命令放到工具栏中,以方便使用。QAction就是这样一种命令动作,它可以同时放在菜单和工具栏中。一个QAction动作包含了一个图标,一个菜单显示文本,一个快捷键,一个状态栏显示文本,一个“What’s This?”显示文本和一个工具提示文本。这些都可以在构建QAction类对象时在构造函数中指定。

另外还可以设置QAction的checkable属性,如果指定这个动作的checkable为true,那么当选中这个菜单时就会在它的前面显示“√”之类的表示选中状态的符号,如果该菜单有图标,那么就会用线框将图标围住,用来表示该动作被选中了。

代码方式添加菜单

// 添加编辑菜单
QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)"));

// 添加打开菜单
 QAction *action_Open = editMenu->addAction(QIcon(“../images/open.png"),tr("打开文件(&O)"));

// 设置快捷键
action_Open->setShortcut(QKeySequence("Ctrl+O"));       

// 在工具栏中添加动作
ui->mainToolBar->addAction(action_Open);   

工具栏

工具栏QToolBar类提供了一个包含了一组控件的可以移动的面板。在上面已经看到可以将QAction对象添加到工具栏中,它默认只是显示一个动作的图标,这个可以在QToolBar的属性栏中进行更改。

在设计器中可以查看QToolBar的属性栏,其中toolButtonStyle属性设置图标和相应文本的显示及其相对位置等;movabel属性设置状态栏是否可以移动;allowedArea设置允许停靠的位置;iconsize属性设置图标的大小;floatable属性设置是否可以悬浮。

在工具栏中添加部件

    QToolButton *toolBtn = new QToolButton(this);        // 创建QToolButton
    toolBtn->setText(tr("颜色"));
    QMenu *colorMenu = new QMenu(this);                  // 创建一个菜单
    colorMenu->addAction(tr("红色"));
    colorMenu->addAction(tr("绿色"));
    toolBtn->setMenu(colorMenu);                         // 添加菜单
    toolBtn->setPopupMode(QToolButton::MenuButtonPopup); // 设置弹出模式
    ui->mainToolBar->addWidget(toolBtn);           // 向工具栏添加QToolButton按钮
    QSpinBox *spinBox = new QSpinBox(this);         // 创建QSpinBox
    ui->mainToolBar->addWidget(spinBox);            // 向工具栏添加QSpinBox部件

运行结果:

中心部件

在主窗口的中心区域可以放置一个中心部件,它一般是一个编辑器或者浏览器。这里支持单文档部件,也支持多文档部件。一般的,会在这里放置一个部件,然后使用布局管理器使其充满整个中心区域,并可以随着窗口的大小变化而改变大小。例如在设计模式中,往中心区域拖入一个Text Edit,然后点击界面,按下Ctrl+G使其处于一个栅格布局中。 效果如下。

Dock部件

QDockWidget类提供了这样一个部件,它可以停靠在QMainWindow中也可以悬浮起来作为桌面顶级窗口,我们称它为Dock部件或者停靠窗口。Dock部件一般用于存放其他一些部件来实现一些特殊功能,就像一个工具箱一样。它在主窗口中可以停靠在中心部件的四周,也可以悬浮起来,被拖动到任意的地方,还可以被关闭或隐藏起来。一个Dock部件包含一个标题栏和一个内容区域,可以向Dock部件中放入任何部件。

例如:在设计模式中向中心区域拖入一个Dock Widget部件,然后再向Dock中随意拖入几个部件,比如这里拖入一个Push Button和一个Font Combo Box。然后在dockWidget的属性栏中更改其windowTitle为“工具箱”。

状态栏

QStatusBar类提供了一个水平条,用来显示状态信息。QMainWindow中默认提供了一个状态栏。

状态信息可以被分为三类:

  • 临时信息,如一般的提示信息;
  • 正常信息,如显示页数和行号;
  • 永久信息,如显示版本号或者日期。

可以使用showMessage()函数来显示一个临时消息,它会出现在状态栏的最左边。

一般用addWidget()函数添加一个QLabel到状态栏上用于显示正常信息,它会生成到状态栏的最左边,可能会被临时消息所掩盖。

如果要显示永久信息,要使用addPermanentWidget()函数来添加一个如QLabel一样的可以显示信息的部件,它会生成在状态栏的最右端,不会被临时消息所掩盖。

在状态栏的最右端,还有一个QSizeGrip部件,用来调整窗口的大小,可以使用setSizeGripEnabled()函数来禁用它。

目前的设计器中还不支持直接向状态栏中拖放部件,所以需要使用代码来生成。例如:

// 显示临时消息,显示2000毫秒即2秒钟
ui->statusBar->showMessage(tr("百度一下"), 2000);
// 创建标签,设置标签样式并显示信息,将其以永久部件的形式添加到状态栏
QLabel *permanent = new QLabel(this);
permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
permanent->setText("www.baidu.com");
ui->statusBar->addPermanentWidget(permanent);

此时运行程序,可以发现“欢迎使用多文档编辑器”字符串在显示一会儿后就自动消失了,而“www.yafeilinux.com”一直显示在状态栏最右端。

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值