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

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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值