Programowanie C++ Qt4 w systemie Gnu-Linux/QVariant

QVariant to klasa służąca do przechowywania zmiennych różnych typów. Poniższy krótki będzie to przykład wykorzystania klasy QVariant, w krótkim programie;


Na początek własny typ, który z założenia będzie tablicą bitową. Tablica ma rozmiar szesnastu bitów(WORD) i ma być możliwość odczytania każdego bitu z osobna za pomocą operatora []. Operator [] to drugi po "<<" którego przeładowanie zrobiłem. Wcześniej to zagadnienie wydawało Mi się zbędne. Ale jak widać w stosunku do tych dwóch operatorów przeładowanie się prydaje


#ifndef PLCBITSARRAY_H
#define PLCBITSARRAY_H
typedef unsigned short WORD; //Word nie jest standardowym typem C++

//definiujemy klasę tablicaBitowa
class plcBitsArray
{
    WORD data; //składnik klasy
public:

    //poniżej konstruktor funkcja uruchamiana automatycznie przy tworzeniu obiektu
    //nie robi nic poza wpisaniem 0 do pola daty
    plcBitsArray(int _data=0){data=_data;}

    //poniżej funkcja która ustawi pole data; robi to samo co konstruktor tyle że numer już ma wartość zadaną
    void fromNumer(int numer){data=numer;}



    //najważniejsza funkcja przeładowany operator.
    //Zadaniem funkcji jest sprawdzenie stanu bita o zadanym numerze
    bool operator[](int bitNumer){
        return data&1<<bitNumer;

    /* krok po kroku rozpiszę tą funkcję
    WORD maska=1<<bitNumer; // maska to zmienna, która ma jdynkę przesuniętą o liczbę pól określoną w zmiennej bitnumer.
    WORD temp = data&maska; //robimy AND zmienej data z maską. Wynikiem iloczynu pola data z maską jest 0 lub 1. W zależności od tego jaki jest stan ma bit w słowie data. 
    return temp; // 0 to false 1 to true;
    */
    }

};
Q_DECLARE_METATYPE(plcBitsArray); //to trzeba zrobić by można było załadować obiekt własnego typu do zmiennej QVariant
#endif // PLCBITSARRAY_H

Więc napisaliśmy własną prostą klasę bitArray przystosowaną do współpracy z klasą QVariant. Poniżej przedstawię kod funkcji main()

#include "plcBitsArray.h"
#include <QDebug>
#include<QVariant>


int main()
{
  QVariantList blok={QVariant::fromValue(plcBitsArray(0)),QVariant::fromValue(WORD(0)),QVariant::fromValue(int(0))};
  //QList<QVariant>block jest równoznaczne z QVariantList blok;
  //blok to kontener który zawiera 3 elementy 
  foreach (const QVariant& zm, blok) {
      qDebug()<<zm.typeName();
  }
//wypisanie bitu 1 na konsole z kontenera blok;
qDebug()<< blok[0].value<plcBitsArray>()[1]<<" -pierwszy element tablicy bitowej";

}

W funkcji pętla foreach przegląda kontener i zwraca na konsole typ zmiennej przechowywany w kontenerze. Wynik działania programu!!

plcBitsArray 
ushort
int
false -pierwszy element tablicy bitowej