1. 程式人生 > >有關QT中宣告一個vector為全域性變數的初始化問題

有關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)威哥