【学习笔记】C++ GUI Qt4 第三章 3.1 子类化QMainWindow
第三章 创建主窗口
这一章讲解如何使用Qt创建主窗口。在本章的最后部分,你将能够创建一个应用程序的完整用户界面,包括菜单、工具栏、状态栏以及应用程序所需的足够多的对话框。而在第四章则会实现程序的相关功能。Spreadsheet电子制表软件类似于我们常用的Excel。
首先打开Qt Creator新建一个项目Application->Qt Widgets Application->起名为“q02_Spreadsheet”->类名为“MainWindow”。
3.1 子类化QMainWindow
//mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class QAction;
class QLabel;
class FindDialog;
class Spreadsheet;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{//MainWindow类定义为QMainWindow类的子类。
//由于类MainWindow提供了自己的信号和槽,所以它包含了Q_OBJECT宏
Q_OBJECT
public:
MainWindow();
~MainWindow();
protected:
void closeEvent(QCloseEvent *event);
//closeEvent()函数是QWidget类中的一个虚函数,当用户关闭窗口时,这个函数会被自动调用。
//类MainWindow中重新实现了它,这样就可以向用户询问一个标准问题“Do you want to save yourchanges?" ,并且可以把用户的一些偏好设置保存到磁盘中。
private slots:
void newFile();
void open();
bool save();
bool saveAs();
void find();
void goToCell();
void sort();
void about();
/*
* 像File->New和Help->About这样的菜单项,在MainWindow中会被实现为私有槽。
* 除了save()槽和saveAs( )槽返回一
* 个bool值以外,绝大多数的槽都把void作为它们的返回值。
* 当槽作为一个信号的响应函数而被执行时,就会忽略这个返回值;
* 但是当把槽作为函数来调用时,其返回值对我们的作用就和调用任何一个普通的C++函数时的作用是相同的。
*/
void openRecentFile();
void updateStatusBar();
void spreadsheetModified();
private:
Ui::MainWindow *ui;
void createActions();
void createMenus();
void createContextMenu();
void createToolBars();
void createStatusBar();
void readSettings();
void writeSettings();
bool okToContinue();
bool loadFile(const QString &fileName);
bool saveFile(const QString &fileName);
void setCurrentFile(const QString &fileName);
void updateRecentFileActions();
QString strippedName(const QString &fullFileName);
Spreadsheet *spreadsheet;
FindDialog *findDialog;
QLabel *locationLabel;
QLabel *formulaLabel;
QStringList recentFiles;
QString curFile;
enum { MaxRecentFiles = 5 };
QAction *recentFileActions[MaxRecentFiles];
QAction *separatorAction;
QMenu *fileMenu;
QMenu *editMenu;
QMenu *selectSubMenu;
QMenu *toolsMenu;
QMenu *optionsMenu;
QMenu *helpMenu;
QToolBar *fileToolBar;
QToolBar *editToolBar;
QAction *newAction;
QAction *openAction;
QAction *saveAction;
QAction *saveAsAction;
QAction *exitAction;
QAction *cutAction;
QAction *copyAction;
QAction *pasteAction;
QAction *deleteAction;
QAction *selectRowAction;
QAction *selectColumnAction;
QAction *selectAllAction;
QAction *findAction;
QAction *goToCellAction;
QAction *recalculateAction;
QAction *sortAction;
QAction *showGridAction;
QAction *autoRecalcAction;
QAction *aboutAction;
QAction *aboutQtAction;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include <QtWidgets>//包含了在子类中所要用到的所有Qt类的定义
#include "mainwindow.h"
#include "ui_mainwindow.h"
//后面实现的四个类
#include "finddialog.h"
#include "gotocelldialog.h"
#include "sortdialog.h"
#include "spreadsheet.h"
MainWindow::MainWindow():ui(new Ui::MainWindow)
{
ui->setupUi(this);
spreadsheet = new Spreadsheet;
setCentralWidget(spreadsheet);
//创建一个Spreadsheet窗口,并设置为*窗口部件,见下图
//Spreadsheet类是QTableWidget类的一个子类,并且也具有一些电子制表软件的功能
createActions();
createMenus();
createContextMenu();
createToolBars();
createStatusBar();
//创建主窗口中的其余部分
readSettings();
//读取这个应用程序存储的一些设置
findDialog = 0;
//我们把findDialog指针初始化为空(null)指针。在第一次调用MainWindow::find()函数时,将会创建该FindDialog对象。
setWindowIcon(QIcon(":/images/icon.png"));
//把窗口图标设置为icon.png
//资源机制
setCurrentFile("");
//初始化设置当前路径为空
}
图形用户界面(GUI)应用程序通常会使用很多图片。为应用程序提供图片的方法有多种,如
下是一些最常用的方法:
● 把图片保存到文件中,并且在运行时载人它们。
● 把XPM文件包含在源代码中。(这一方法之所以可行,是因为XPM文件也是有效的C++
文件。)
● 使用Qt的资源机制( resource mechanism)。
这里,使用了Qt的资源机制法,因为它比运行时载入文件的方法更方便,并且该方法适用于所支持的任意文件格式。我们将选中的图片存放在源代码树中名为images 的子目录下。(右键.pro文件->在Explorer中显示->创建images文件夹->将图片放至此文件夹下)
为了利用Qt的资源系统(resource system) ,必须创建一个资源文件( resource file) 。
1、右键项目名->Qt中选择Qt Resource File->名称为“spreadsheet.qrc”
2、添加->添加前缀->前缀设置为“/”
3、添加->添加文件->打开images文件夹选中其中的图片
资源文件自身使用了一种简单的XML文件格式。这里给出的是从已经使用的资源文件中的内容。
<RCC>
<qresource prefix="/">
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/find.png</file>
<file>images/gotocell.png</file>
<file>images/icon.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/save.png</file>
</qresource>
</RCC>
所有资源文件都会被编译到应用程序的可执行文件中,因此并不会弄丢它们。当引用这些资源时,需要使用带路径前缀:/(冒号斜线)的形式,这就是为什么会将图标表示成:/imges/icon. png的形式。资源可以是任意类型的文件(并非只是一些图像,还可以是音频、视频等等) ,并且可以在Qt需要文件名的大多数地方使用它们。第12章将对此做进一步说明 。
上一篇: QT笔记——QLayout
下一篇: (PHP)模板引擎Smarty介绍
推荐阅读
-
【学习笔记】C++ GUI Qt4 第四章 4.1 *窗口部件和4.2子类化QTableWidget
-
【学习笔记】C++ GUI Qt4 第三章 3.5 使用对话框和3.6存储设置
-
【学习笔记】C++ GUI Qt4 第三章 3.2 创建菜单和工具栏和3.3设置状态栏
-
【学习笔记】C++ GUI Qt4 第四章 4.5 实现其他菜单 和 4.6 子类化QTableWidgetItem
-
【学习笔记】C++ GUI Qt4 第三章 3.4 实现File菜单
-
【学习笔记】C++ GUI Qt4 第三章 3.7 多文档和3.8程序启动画面
-
【学习笔记】C++ GUI Qt4 第三章 3.1 子类化QMainWindow