逛奔的蜗牛

我不聪明,但我会很努力

   ::  :: 新随笔 ::  ::  :: 管理 ::
#include <iostream>
#include 
<QFile>
#include 
<QImage>
#include 
<QMap>
#include 
<QColor>

class C {
public:
    C(quint32 value 
= 0) :
        value(value) {
    }

    
// Override operator << and >>.
    friend QDataStream &operator<<(QDataStream &out, const C &obj);
    friend QDataStream 
&operator>>(QDataStream &in, C &obj);

    quint32 getValue() 
const {
        
return value;
    }

private:
    quint32 value;
};

QDataStream 
&operator<<(QDataStream &out, const C &obj) {
    out 
<< obj.value;

    
return out;
}

QDataStream 
&operator>>(QDataStream &in, C &obj) {
    in 
>> obj.value;

    
return in;
}

/**
 * Copy a file
 
*/
bool copy(
const QString &source, const QString &dest) {
    QFile sourceFile(source);
    
if (!sourceFile.open(QIODevice::ReadOnly)) {
#ifdef DEBUG
        std::cerr 
<< sourceFile.errorString().toStdString() << std::endl;
#endif
        
return false;
    }

    QFile destFile(dest);
    
if (!destFile.open(QIODevice::WriteOnly)) {
#ifdef DEBUG
        std::cerr 
<< destFile.errorString().toStdString() << std::endl;
#endif
        
return false;
    }

    destFile.write(sourceFile.readAll());

    
return sourceFile.error() == QFile::NoError && destFile.error()
            
== QFile::NoError;
}

/**
 * Instantiate a QFile
 * Open the file
 * Access the file through q QDataStream object.
 * 
 * Must ensure that we read all the types in exactly the same order
 * as we wrote them.
 * 
 * If the DataStream is being purely used to read and write basic C++ data types,
 * we dont' even need to call setVersion().
 * 
 * If we want to read or write a file in one go. WE can avoid using QDataStream altogether
 * and instead using QIODevice's write() and readAll() function.
 * For example copy a file.
 
*/
int main(int argc, char *argv[]) {
    
//********Write data in to the file.********
    QImage image("Adium.png");
    QMap
<QString, QColor> map;
    map.insert(
"red", Qt::red);
    map.insert(
"green", Qt::green);
    C c(
23);
    QFile file(
"data.dat");
    
if (!file.open(QIODevice::WriteOnly)) {
        std::cerr 
<< "Cannot open the file: Write." << file.errorString().toStdString() << std::endl;

        
return 1;
    }

    QDataStream out(
&file);
    out.setVersion(QDataStream::Qt_4_3);
    out 
<< quint32(7456<< map << c;
    file.close();

    
//********Read data from the file.********
    quint32 value;
    QMap
<QString, QColor> map2;
    C c2;
    
if (!file.open(QIODevice::ReadOnly)) {
        std::cerr 
<< "Cannot open the file: Read." << file.errorString().toStdString() << std::endl;

        
return 2;
    }
    QDataStream in(
&file);
    in.setVersion(QDataStream::Qt_4_3);
    in 
>> value >> map2 >> c2;
    file.close();

    std::cout 
<< value << std::endl << c2.getValue();

    copy(QString(
"Adium.png"), QString("Copy_Adium.png"));
    
    
return 0;
}

posted on 2008-03-19 00:11 逛奔的蜗牛 阅读(7268) 评论(0)  编辑 收藏 引用 所属分类: Qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理