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

    xiaoxiao2021-03-25  126

    在有图像界面的程序中,添加一些图片是很常见的事,这些图片可以作为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(); }
    转载请注明原文地址: https://ju.6miu.com/read-15421.html

    最新回复(0)