一、实验目的:
|
1.创建主窗口菜单; 2.添加菜单图标; 3.添加资源文件; 4.使用资源文件; 5.使用代码来添加菜单和图标。 |
1.创建主窗口菜单. (1).新建QTWidget应用,项目名称为MymainWindow,基类选择QMainWindow,类名为MainWindow。 如图1.1所示:
图1.1新建项目 (2). 创建完项目后,双击 mainwindow.ui 文件进入设计模式。可以看到界面左上角的“在这里输入”,可以在这里添加菜单。双击“在这里输入”,将其更改为“文件(&F)”,然后按下回车键,这里的&F 表明将菜单的快捷键设置为了 Alt + F,可以看到,实际的显示效果中&符号是隐藏的。同样的方法,在文件菜单中添加“新建(&N)”菜单项(如果无法输入中文,可以从别处复制粘贴),菜单后面的那个加号图标是用来创建下一级菜单的。 (注:括号要用英文格式.) 效果如图1.2所示: 图1.2创建菜单项 2.添加菜单图标 (1) Qt中的一个菜单项,被看做是一个 Action,在设计器下面的 Action 编辑器中可以看到刚才添加的“新建”动作。如图2.1所示: 图2.1动作编辑器 (2) 双击 action_N 条目,会弹出编辑动作对话框,这里可以进行各项设置,比如可以设置动作的快捷键,点击一下快捷键后面的行编辑器,然后按下键盘上的 Ctrl + N,这样就可以将该菜单的快捷键设置为 Ctrl + N。如图2.2所示: 图2.2编辑动作 (3). 在编辑动作对话框中的图标后面的 黑色箭头下拉框可以选择使用资源还是使用文件来设置图标,如果使用文件的话,那么就可以直接在弹出的文件对话框中选择本地磁盘 上的一个图标文件。如果直接单击这个按钮默认是使用资源。现在先按下编辑动作对话框的“OK”按钮关闭它。 3.添加资源文件 Qt 中可以使用资源文件将各种类型的文件添加到最终生成的可执行文件中,这样就可以避免使用外部文件可能出现的一些问题。而且,在编译时 Qt 还会将资源文件进行压缩, 可以使可执行文件的体积尽可能缩小。 (1). 向项目中添加新文件,模板选择 Qt 分类中的 Qt Resource File,如图 3.1 所示。然后将名称设置为“myResources” 图3.1创建资源文件 (2). 创建完文件后会自动打开该资源文件,这里需要先在下面添加前缀,点击添加按钮, 然后选择前缀,默认的前缀是“/new/prefix1”,这个可以随意修改(不要出现中文字符)。这里因为要添加图片,所以修改为/images。然后再按下添加按钮来添加文件,这里最好将所有要用到的图片放到项目目录中。比如这里在项目目录中新建了一个 images 文件夹, 然后将需要的图标文件复制进去。如图 3.2所示: 图3.2添加图片 4.使用资源文件 (1). 重新到设计模式打开新建菜单的编辑动作对话框,然后添加图标。在打开的选择资源对话框中,第一次可能无法显示已经存在的资源,可以按下左上角的绿箭头 来更新显示。如图4.1所示: 图4.1添加资源图标 (2) 点击这里需要的新建图标 filenew.png,按下“OK”按钮即可。现在按下 Ctrl + R 键运行程序. 效果如图4.2所示: 图4.2添加图标运行效果 5.使用代码来添加菜单和图标 (1). 对于添加的资源文件,在项目目录中可以看到,即 myResources.qrc,使用写字板程序将其打开,可以发现它其实就是一个 XML 文档,如图5.1所示: 图5.1图片路径 (2.) 前面是在设计模式添加了图标文件,下面使用代码再来添加一个菜单,并为其设置图标。在编辑模式打开 mainwindow.cpp 文件,并在构造函数中添加如下代码: //添加编辑菜单 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); 注:这里添加图标时,就是使用的资源文件中的图标。使用资源文件,需要在最开始使用冒 号,然后添加前缀,后面是文件的路径。在代码中使用文件菜单,就是使用其 objectName 属性。 (3). 现在运行程序查看效果. |
//mainWindow.cpp 构造函数部分源码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QToolButton>
#include<QSpinBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//添加编辑菜单
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);
//动作组QActionGroup类
QActionGroup *group = new QActionGroup(this); //建立动作组
QAction *action_L = group->addAction(tr("左对齐(&L)")); //向动作组中添加动作
action_L->setCheckable(true); //设置动作checkable属性为true
QAction *action_R = group->addAction(tr("右对齐(&R)"));
action_R->setCheckable(true);
QAction *action_C = group->addAction(tr("居中(&C)"));
action_C->setCheckable(true);
action_L->setChecked(true); // 最后指定action_L为选中状态
editMenu->addSeparator(); // 向菜单中添加间隔器
editMenu->addAction(action_L); // 向菜单中添加动作
editMenu->addAction(action_R);
editMenu->addAction(action_C);
//工具栏QToolButton类
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按钮
}
MainWindow::~MainWindow()
{
delete ui;
}
四、实验总结:(实验中遇到的问题及解决方法,心得体会等) 这次的实验内容是学会使用QT的资源文件,在8号晚自习的时候,没有跟上老师的步骤,导致了部分内容脱节,实验实现的效果没有达到要求,后来在课后,我花了一些时间重新搭建项目,看着电子书上面的教程,慢慢摸索,不断修改代码的出错问题;最终把它拿下了。然后一不小心又提前了一些,然后现在在做中心部件、Dock部件、以及状态栏。总之,当自己一步一步把要求做出来的时候,很有成就感,很享受这个实验的过程。 |