您的位置:首页 > 编程语言 > Qt开发

有关QT中声明一个vector为全局变量的初始化问题

2017-11-20 11:30 2096 查看
前面说了一个简单的int类型全局变量,是怎么实现的,但是对于更复杂一点的vector类型,上面的方法固然可以借鉴,但是初始化的问题应该是不一样的。

全局变量:在头文件的类中声明,在cpp文件的函数体外面进行初始化。基本的套路就是这样的

类的静态变量必须在类外初始化,这个懂吧!

来个具体点儿的

STLView.h

class STLView
{
public:
STLView(); //声明构造函数
bool readSTL(const QString &fname); //读取STL数据
QVector<MyTriangle> triangleVector; //三角面的集合
static int splitString(const QString &str, char split, QVector<QString>& strArray); //是一个静态成员函数
double triangleZMax,triangleZMin; //定义所有三角面片的z坐标最大值和最小值
static bool comp(const MyTriangle &a, const MyTriangle &b);
//排序函数,按照MyTriangle.zmin的值排序;QVector序数越大,zmin越大;升序排列,,这里必须写成静态成员函数
//如果存在三角形a和b的zmin相同,那么看a和b在STL文件中的顺序,排在前面的话,最终在QVector里面排后面

// double read();
// MyPoint lineDir,testPoint; //定义两点直线的方向,测试点
QVector<CrossPoint> CrossPointVector; //交点容器

static QVector<QPointF> vector; //设置轮廓二维点信息,定义一个向量存储QPoint类型的点
static QPointF point;
static int a; //定义全局变量

double ZLevel; //定义z平面的值
double Dist(MyPoint P1, MyPoint P2); //计算两点距离
bool Between(MyPoint P1, MyPoint P2, MyPoint P3); //判断point3是否在point1和point2之间
};



STLView.cpp
#include "STLView.h"
#include <QFile>
#include <QTextStream>
#include <QDebug>
#include <QtAlgorithms>//数据排序
#include <QList>

int STLView::a = 11111; //int类型初始化

QPointF STLView::point = QPointF(1,1); //vector类型初始化
QVector<QPointF> STLView::vector = QVector<QPointF>();

STLView::STLView() //默认构造函数,带有数组的声明必须有默认构造函数
{

}



有一个问题不得不重视:
就是在给QPointF类型的vector赋初值的时候,一般的vector赋值都是用append,push_back ,但是这两个函数呢,它们必须在函数内部使用;然而我们要在函数
外部给全局变量vector赋值,显然append,push_back是不管用的,所以我们调用了vector的构造函数,之后再在类的构造函数插入或者赋值。
最后,谢谢大连(27754587)威哥
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: