原文网址:http://www.dazzle.plus.com/linux/QtCreator/part03.htm
第3部份:添加一个显示区域
使用图形视图
为了让用户与我们的应用程序中的数据以图形化方式来管理和互动,我们在应用程序主窗口的中央使用一个“图形视图”小部件。Qt图形视图框架给我们提供了许多有用的特性,用来展示与交互定制的2D图形项目。
为了实现图形视图,我们创建了一个将用来包含应用程序数据的场景,和在应用程序主窗口中央区域添加一个视图小部件用来显示这个场景。使场景具有更有灵活性和封装数据,我们新建一个类来实现这个场景。在本教程的后面部份,我们将增强这个场景类让用户可以绘制模拟无线基站和交互操作。
添加新类
新的类将被叫作“Scene”,使用QtCreator的“新建...”文件菜单向导加入到我们的项目中。选择“C++类”并按下“确定”。
填好类名“Scene”和基类名“QGraphicsScene”后,按“下一步”。头文件和资源文件名将会自动产生,使用默认的文件保存目录。
最后按下“完成”按钮把这些文件添加到我们的项目中。
使代码更易于阅读和更好的适合我们,我们将再次用下面的代码替换QtCreator创建的模板代码。
scene.h
#ifndef SCENE_H
#define SCENE_H
#include <QGraphicsScene>
/*************************************************************************************/
/******************** 表示模拟景观的场景 *********************/
/*************************************************************************************/
class Scene : public QGraphicsScene
{
public:
Scene(); // 构造函数
};
#endif // SCENE_H
我们的类继承QGraphicsScene,现在它只有一个空的构造函数。
scene.cpp
#include "scene.h"
/*************************************************************************************/
/******************** 表示模拟景观的场景 *********************/
/*************************************************************************************/
/************************************ constuctor *************************************/
Scene::Scene() : QGraphicsScene()
{
}
创建场景和视图
在主窗口构造函数中创建场景和视图。
因为我们不需要在头文件中添加类Scene的所有定义,我们只在头文件中添加类Scene前置定义并且在cpp文件中引入类Scene的头文件。这使得项目编译非常快,因为编译器常常花费大部份时间来解析头文件。仅这招往往是加快编译的两个或两个以上的因素之一。
class Scene;
创建一个私有的场景指针变量。
private:
Scene* m_scene; // 表示模拟景观的场景
引入类Scene的头文件。
#include "scene.h"
引入类QGraphicsView的头文件。
#include <QGraphicsView>
在构造函数里添加创建场景和视图的代码。我们还要设置显示场景视图的对齐方式为左上角,这样Qt就不会在场景大小发生变化时不恰当地重新定位我们的图形元素,我们删除了帧,使它看起来更好。设置视图为中央部件。
// 创建场景和显示场景的中央视图部件
m_scene = new Scene();
QGraphicsView* view = new QGraphicsView( m_scene );
view->setAlignment( Qt::AlignLeft | Qt::AlignTop );
view->setFrameStyle( 0 );
setCentralWidget( view );
编译和运行
当你尝试运行应用程序时,新代码会被编译。