Qt学习例子6——customtype

主要测试运算符重载

 

代码如下:

 

//person.h

 

#ifndef PERSON_H
#define PERSON_H
#include <QString>
class Person
{
public:
    Person();
    Person(const QString &firstName, const QString &initials, const QString &familyName);
    const QString &firstName() const;
    const QString &initials() const;
    const QString &familyName() const;
    void setFirstName(const QString &firstName);
    void setInitials(const QString &initials);
    void setFamilyName(const QString &familyName);
private:
    QString m_firstName;
    QString m_initials;
    QString m_familyName;
};
#endif // PERSON_H

 

//person.cpp

 

#include "person.h"
Person::Person()
{
}
Person::Person(const QString &firstName, const QString &initials, const QString &familyName) :
        m_firstName(firstName), m_initials(initials), m_familyName(familyName)
{
}
const QString &Person::firstName() const
{
    return m_firstName;
}
const QString &Person::initials() const
{
    return m_initials;
}
const QString &Person::familyName() const
{
    return m_familyName;
}
void Person::setFirstName(const QString &firstName)
{
    m_firstName = firstName;
}
void Person::setInitials(const QString &initials)
{
    m_initials = initials;
}
void Person::setFamilyName(const QString &familyName)
{
    m_familyName = familyName;
}

 

 

//main.cpp

 

#include <QApplication>
#include <QList>
#include <QFile>
#include <QDataStream>
#include <QHash>
#include <QVariant>
#include "person.h"
// Insert code for exercise step 3 here
QDataStream &operator<<(QDataStream &stream, const Person &per)
{
  stream<<per.firstName()
        <<per.initials()
        <<per.familyName();
  return stream;
//    stream << t.string();
//    stream << t.integer();
//    stream << t.double();
}
QDataStream &operator>>(QDataStream &stream, Person &per)
{
   QString firstname,initials,family;
   stream>>firstname>>initials>>family;
   per.setFirstName(firstname);
   per.setInitials(initials);
   per.setFamilyName(family);
   return stream;
//    QString t;
//    stream >> t; t.setString(t);
}
// Insert code for exercise step 4 here
Q_DECLARE_METATYPE(Person)
uint qHash(const Person& pe)
{
    return qHash(pe.firstName());//return qHash(pe.initials());
}
bool operator==(const Person &p1, const Person &p2)
{
    if(p1.firstName()==p2.firstName() &&
            p1.initials()==p2.initials() &&
            p1.familyName()==p2.familyName())
        return true;
    else
        return false;
}
// Insert code for exercise step 5 here
// Do not modify code below this line (except activating code for exercise steps 4 and 5)
void savePeople(const QList<Person> &people)
{
    QFile file("persons.dat");
    if(!file.open(QIODevice::WriteOnly))
        return;
    QDataStream stream(&file);
    stream << people;
    file.close();
}
QList<Person> loadPeople()
{
    QList<Person> result;
    QFile file("persons.dat");
    if(!file.open(QIODevice::ReadOnly))
        return result;
    QDataStream stream(&file);
    stream >> result;
    return result;
}
void saveAndLoadPeople(QList<Person> people)
{
    qDebug("Original people");
    foreach(const Person &p, people)
        qDebug("  %s %s %s", qPrintable(p.firstName()), qPrintable(p.initials()), qPrintable(p.familyName()));
    savePeople(people);
    people = loadPeople();
    qDebug("Loaded people");
    foreach(const Person &p, people)
        qDebug("  %s %s %s", qPrintable(p.firstName()), qPrintable(p.initials()), qPrintable(p.familyName()));
}
void hashOfPeople()
{
    QHash<Person, int> age;
    age[Person("John", "", "Doe")] = 42;
    age[Person("Jane", "", "Doe")] = 36;
    age[Person("Albert", "A", "Einstein")] = 76;
    if(42 != age[Person("John", "", "Doe")])
        qDebug("Something's wrong with John");
    if(36 != age[Person("Jane", "", "Doe")])
        qDebug("Something's wrong with Jane");
    if(76 != age[Person("Albert", "A", "Einstein")])
        qDebug("Something's wrong with Albert");
}
void variantsOfPeople(QList<Person> people)
{
    qDebug("Original variants of people");
    foreach(const Person &p, people)
        qDebug("  %s %s %s", qPrintable(p.firstName()), qPrintable(p.initials()), qPrintable(p.familyName()));
    QList<QVariant> variantList;
    foreach(const Person &p, people)
        variantList << QVariant::fromValue(p);
    people.clear();
    foreach(const QVariant &v, variantList)
        people << v.value<Person>();
    qDebug("People after variants");
    foreach(const Person &p, people)
        qDebug("  %s %s %s", qPrintable(p.firstName()), qPrintable(p.initials()), qPrintable(p.familyName()));
}
int main(int argc, char **argv)
{
    QApplication a(argc, argv);
    Person johnD("John","","Doe");
    Person janeD("Jane","","Doe");
    QList<Person> people;
    people << johnD << janeD << Person("Albert", "A", "Einstein");
    saveAndLoadPeople(people);
    hashOfPeople();
    variantsOfPeople(people);
    return a.exec();
}

 

 

程序运行截图:

 Qt学习例子6鈥斺攃ustomtype

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值