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

来源:互联网 发布:python 字符串相似度 编辑:程序博客网 时间:2024/06/14 03:29

前面说了一个简单的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)威哥

原创粉丝点击