Essential Qt 第六章 记事本(三)添加图片,工具栏,状态栏与快捷键。

         在有图像界面的程序中,添加一些图片是很常见的事,这些图片可以作为log,背景等,而在这里演示的是将一些图片添加到菜单中,并作为工具栏的内容。
         Qt中使用一种qrc格式的文件来作为添加资源的文件,注意这里是添加的资源不限于图片,其他音频视频也可以这样添加。具体步骤:
          1.在程序目录下新建一个images的子文件目录,然后将需要的图片放入这个子目录呢
          2.建立一个qrc格式文件,例子中是pix.qrc,具体内容为XML格式 
<RCC>
<qresource>
<file>images/center.png</file>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/delete.png</file>
<file>images/files.ico</file>
<file>images/left.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/read.png</file>
<file>images/re.png</file>
<file>images/right.png</file>
<file>images/saveAs.png</file>
<file>images/save.png</file>
<file>images/un.png</file>
</qresource>
</RCC>


         然后就可以在程序中使用这些图片了

         在前面的例子中菜单文件和编辑上的一些动作(QAction)可以添加一个图片作为标识,在ReadMe.h文件中添加一个私有函数SetActionPix()来实现这个功能,这个函数具体实现如下
void ReadMe::SetActionPix()
{
  New_Action->setIcon(QIcon(":/images/new.png")); //注释1
  Open_Action->setIcon(QIcon(":/images/open.png"));
  Save_Action->setIcon(QIcon(":/images/save.png"));
  SaveAs_Action->setIcon(QIcon(":/images/saveAs.png"));
 
  Redo_Action->setIcon(QIcon(":/images/re.png"));
  Undo_Action->setIcon(QIcon(":/images/un.png"));
  Cut_Action->setIcon(QIcon(":/images/cut.png"));
  Copy_Action->setIcon(QIcon(":/images/copy.png"));
  Paste_Action->setIcon(QIcon(":/images/paste.png"));
  Delete_Action->setIcon(QIcon(":/images/delete.png"));

  LeftAlignment_Action->setIcon(QIcon(":/images/left.png"));
  RightAlignment_Action->setIcon(QIcon(":/images/right.png"));
  MidAlignment_Action->setIcon(QIcon(":/images/center.png"));
}  


注释1: 这里QIcon()函数用于返回一个指向QIcon类的指针,换个不太恰当的说法就是返回指向图片的指针,而
              QAction的成员函数setIcon()则用于给动作添加图片

              这样就完成了给菜单上的动作添加图片的工作,接下来的任务是给这个程序添加一个工具栏,在          QMainWindow中,成员函数addToolBar()用于添加一个工具栏,同时返回执行指向这个工具栏的指针,这个指针的类型是QToolBar*,在文件中添加包含这个类的头文件,同时在添加一个用于创建工具栏的私有函数CreateToolBar()来具体实现。
               ReadMe.h文件应该添加下面的代码
#include<QToolBar>
//..
//.
 QToolBar* FileTools_ToolBar;
 QToolBar* EditTools_ToolBar;
 QToolBar* FormatTools_ToolBar;
//..
CreateToolBar();


然后在ReadMe.cxx文件中实现这个函数的功能
void ReadMe::CreateToolBar()
{
  FileTools_ToolBar = addToolBar(tr("文件"));  //注释1
  FileTools_ToolBar->addAction(New_Action);
  FileTools_ToolBar->addAction(Open_Action);
  FileTools_ToolBar->addAction(Save_Action);
  FileTools_ToolBar->addAction(SaveAs_Action);

  EditTools_ToolBar = addToolBar(tr("编辑"));
  EditTools_ToolBar->addAction(Redo_Action);
  EditTools_ToolBar->addAction(Undo_Action);
  EditTools_ToolBar->addAction(Cut_Action);
  EditTools_ToolBar->addAction(Copy_Action);
  EditTools_ToolBar->addAction(Paste_Action);
  EditTools_ToolBar->addAction(Delete_Action);

  FormatTools_ToolBar = addToolBar(tr("格式"));
  FormatTools_ToolBar->addAction(LeftAlignment_Action);
  FormatTools_ToolBar->addAction(MidAlignment_Action);
  FormatTools_ToolBar->addAction(RightAlignment_Action);
}


注释1: QMainWindow类的成员函数addToolBar()创建一个工具栏,同时返回指向这个工具栏的指针,然后就
              可以向这个工具栏里添加动作(QAction),创建工具栏和创建菜单栏很相似,又有些区别,可以仔细对比
              下CreateMenu(),CreateMenuBar()和CreateToolBar()的区别

              接下来是个程序添加一个状态栏,一般状态栏位于程序的底部,用于说明某些功能的详细,QMainWindow类成员函数statusBar()会在第一次调用时创建一个状态栏,我们这里要做的是当鼠标悬停在菜单上的某个选项(即QAction)时,状态栏会给出这个选项的详细说明,而QAction类提供了一个成员函数setStatusTip()来实现这个功能,现在将这个功能整合到我们的程序ReadMe中
             首先在ReadMe.h文件中添加一个私有函数
void CreateStatusBar();

            然后在ReadMe.cxx文件中实现这个函数
void ReadMe::CreateStatusBar()
{
  statusBar();  //注释1
  New_Action->setStatusTip(tr("新建一个文件"));   //注释2
  Open_Action->setStatusTip(tr("打开一个文件"));
  Save_Action->setStatusTip(tr("保存当前文件"));  
}


注释1:这里调用statusBar()来生产一个状态栏,这个函数同时返回一个指向QStatusBar类型的指针,也就是这个函数生产的
             的状态栏的指针,在我们这个例子中,由于只需要在状态栏上显示信息,默认的状态栏足以,所以对于返回的指针不
             需要做什么,但如果有需要额外的功能,可以将这个函数的返回值复制给一个QStatusBar*,然后在继续操作
注释2: 这里使用了QAction的成员函数setStatusTip()来生成状态栏上的信息,以“新建”为例,当鼠标悬停在“文件”菜单上
              的“新件”选项是,程序底部的状态栏上就会显示信息“新建一个文件”。这里我只设置了3个选项的状态信息,你也可
              以根据程序的具体需求添加其他QAction选项的状态信息

            对于一个程序来说,快捷键是必不可少的一部分,很多时候使用键盘会比使用鼠标更加方便,Qt也提供了一套关于快捷键的方法,以我们现在制作的这个程序为例,最简单的方法就是调用QAction的成员函数setShortcut()来实现快捷键的功能,
但这里遇到一个问题,不同的平台快捷键搜索不同,例如windows系统的Ctrl+c是复制的快捷键,但在Linux系统下Ctrl+c表示终止程序运行,为了解决不同平台快捷键冲突的问题,Qt提供了一个类QKeySquence来解决次问题。
             首先在ReadMe.h中添加一个私有函数用于快捷键的创建
void SetHotKey()
             然后在ReadMe.cxx文件中实现这个函数
void ReadMe::SetHotKey()
{
  New_Action->setShortcut(QKeySequence::New); //注释1
  Copy_Action->setShortcut(QKeySequence::Copy);
  Paste_Action->setShortcut(QKeySequence::Paste);
}


注释1:以“打开”为例,其实这样里可以写成setShortcut("Ctrl+O")来实现功能,但就如前文所述,不同平台的快捷键是不完
             全一样的(虽然Ctrl+O各平台都有相同功能,但不是每个快捷键都这样),所以用QKeySequence类实现比在代码中
             写死要更加灵活,当代码需要跨平台是更加如此。QkeSequence提供了大量的快捷键,内容太多无法在这里全部列
             出,可以在assistant中查询该类,看看里面是否有你需要的快捷键
            
              
              到这里我们完成了记事本程序的大部分界面制作,下章开始我们将实现他的各项功能,这里再次给出ReadMe程序到目前为止的构造函数的完整代码
ReadMe::ReadMe(QWidget* parent):QMainWindow(parent)
{
  CreateAction();
  CreateMenu();
  CreateMenuBar();
  SetActionPix();
  CreateToolBar();
  CreateStatusBar();
  SetHotKey();
  MainEditWindow = new QTextEdit;
  setCentralWidget(MainEditWindow);
  FindWordsDialog = new FindDialog(this);
  setWindowTitle(tr("记事本"));
  ConnectSignalAndSlot();
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值