第5章 应用程序主窗口

 

 5.1主窗口框架

  QMainWindow类拥有自己的布局,包含以下组件:

菜单栏(QMenuBar)、工具栏(QToolBar)、中心部件(Central Widget) 、停靠窗口(QDockWidget)、状态栏(QStatusBar)

5.1.1 Qt资源系统、菜单栏和工具栏

  可以在设计器中新建“Action”,Action可以用在“菜单”或工具栏中。

  资源文件可以在往项目中添加新文件,选择Qt分类中的Qt Resource File,文件名称改为myimages。往项目中添加一个资源文件时,会自动往工程文件mymainwindow.pro中添加代码:

RESOURCES += \

myimages.qrc

  如果是自己添加的已有的资源文件,要想在项目中使用,那么就要手动添加这行代码。

  编写代码方式添加菜单

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

  QAction * action_Open = editMenu->addAction(QIcon(":/image/images/open.png"),tr("打开文件(&O)"));

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

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

  使用ui->menuBar来获取菜单栏,使用ui->mainToolBar来获取工具栏。在菜单中的各种菜单项都是一个QAction类对象。

  3.菜单栏

  QMenuBar类提供一个水平的菜单栏,向其中添加QMenu类型的菜单对象,然后向弹出的菜单中添加QAction类型的动作对象作为菜单项。 间隔器,addSeparator()函数。还可以设置QAction的checkable属性。

  动作组类QActionGroup类,包含一组动作QAction,是否只能有一个动作处于选中状态,这对于互斥型动作很有用。

     4 工具栏

  QToolBar有很多属性可以修改。

  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->maitToolBar->addWidget(toolBtn);

       QSpinBox * spinBox = new QSpinBox(this);

  ui->mainToolBar->addWidget(spinBox);

  当往工具栏中添加一个QAction类对象时就会自动创建了一个QToolButton实例。

5.1.2 中心部件

  支持单文档部件和多文档部件。QMdiArea部件可以显示MDI多文档界面的区域,有效地管理多个窗口。QMdiArea中的子窗口QMdiSubWindow类提供,这类有自己的布局,一个标题栏和一个中心区域。

{

  QTextEdit *edit = new QTextEdit(this);

  QMdiSubWindow * child = ui->midArea->addSubWindow(edit);

  child->setWindowTitle("多文档编辑器子窗口");

  child->show();

}

5.1.3 Dock部件

  QDockWidget类提供了这样一个部件,可以停靠在QMainWindow中,也可以是浮起来作为桌面顶级窗口,称为Dock部件或者停靠窗口。

5.1.4 状态栏

  QStatusBar类显示状态信息,用addWidget()函数添加一个组件到状态栏上,addPermanentWidget()函数来添加一个可以显示信息的部件。QSizeGrip部件,用来调整窗口的大小,可以使用setSizeGripEnabled()函数禁用它。

  在设计模式的相关部件上右击可以删除菜单栏、工具栏、状态栏。

5.1.5 自定义菜单

  可以在工具栏中添加任意的部件。

  实现自定义菜单,需要新建一个类,它继承自QWidgetAction类,并且在其中重新实现createWidget()函数。

  QWidget * MyAction::createWidget(QWidget * parent)

  {  //这里使用inherits()函数判断父部件是否是菜单或者工具栏

    if(parent->inherits("QMenu") || parent-)

      QSplitter * splitter = new QSplitter(parent);

      QLabel * label = new QLabel;

      label ->setText(tr("插入文本"));

      splitter->addWidget(label);

      splitter->addWidget(lineEdit);

      return splitter;

  }

 

  MyAction * action = new MyAction;

  QMenu * editMenu = ui->menuBar->addMenu(tr("编辑(&E)"));

  editMenu->addAction(action);

 

posted @ 2020-03-18 18:16  dignitys  阅读(262)  评论(0)    收藏  举报