void MainWindow::on_pushButton_3_clicked() { // qDebug() << "The default manager for the platform is:" << cm.managerName(); // qDebug() << "It" << (cm.isRelationshipTypeSupported(QContactRelationship::HasAssistant) ? "supports" : "does not support") << "assistant relationships."; // qDebug() << "It" << (cm.supportedContactTypes().contains(QContactType::TypeGroup) ? "supports" : "does not support") << "groups."; // qDebug() << "It" << (cm.hasFeature(QContactManager::MutableDefinitions) ? "supports" : "does not support") << "mutable detail definitions."; QList<QContactLocalId> contactIds = cm.contactIds(); QContact a = cm.contact(contactIds.first()); qDebug() << "Viewing the details of" << a.displayLabel(); QList<QContactDetail> allDetails = a.details(); for (int i = 0; i < allDetails.size(); i++) { QContactDetail detail = allDetails.at(i); QContactDetailDefinition currentDefinition = cm.detailDefinition(detail.definitionName()); QMap<QString, QContactDetailFieldDefinition> fields = currentDefinition.fields(); qDebug("\tDetail #%d (%s):", i, detail.definitionName().toAscii().constData()); foreach (const QString& fieldKey, fields.keys()) { qDebug() << "\t\t" << fieldKey << "(" << fields.value(fieldKey).dataType() << ") =" << detail.value(fieldKey); } qDebug(); } QContact b; QContactDetail de; foreach (const QContactLocalId& ids, contactIds ) { b = cm.contact(ids); de = b.detail("PhoneNumber"); bool s = de.hasValue("PhoneNumber"); qDebug()<< " has Value PhoneNumber key"<<s<<"|"<<de.value("PhoneNumber"); QString show; show = b.displayLabel(); show.append("\t"); show.append(de.value("PhoneNumber")); ui->listWidget_2->addItem(show); }
/*! * Generate the display label * \a contact to read the data from . * \a detailList contains the details to be read from the contact * \return synthesised display label */ QString CntDisplayLabel::generateDisplayLabel( const QContact &contact, const QList<QList<QPair<QLatin1String, QLatin1String> > > detailList) const { // Default to empty display label. It is up to the client to create a // localised presentation of a contact without a name. QString displayLabel(""); //loop through the details and create display label for(int i = 0; i < detailList.count() && displayLabel.isEmpty(); i++ ) { QList<QPair<QLatin1String, QLatin1String> > detailPairList = detailList.at(i); QContactDetail contactDetail; for(int j = 0; j < detailPairList.count(); j++) { contactDetail = contact.detail(detailPairList.at(j).first); if(displayLabel.isEmpty()){ //read the value and set it as display label displayLabel = contactDetail.value(detailPairList.at(j).second); } else{ //read the value and append it to the display label QString label = contactDetail.value(detailPairList.at(j).second); if(!label.isEmpty()) { #ifdef SYMBIAN_BACKEND_USE_SQLITE // Inlcude a comma if needed in the display label if (m_nameOrder == CntOrderLastCommaFirst) displayLabel.append(comma()); #endif displayLabel.append(delimiter()); displayLabel.append(label); } } } } return displayLabel; }
void tst_QContactDetail::values() { QContactDetail p; QCOMPARE(p.variantValues(), QVariantMap()); QDateTime dt = QDateTime::currentDateTime(); QTime t = dt.time(); t.setHMS(t.hour(), t.minute(), t.second(), 0); // milliseconds don't round trip through ISODate dt.setTime(t); QDate d = dt.date(); QDateTime ddt(d); // DateTime version of a Date (QTime()) p.setValue("string", "This is a string"); p.setValue("date", d); p.setValue("datetime", dt); p.setValue("int", (int)6); p.setValue("stringdate", d.toString(Qt::ISODate)); p.setValue("stringdatetime", dt.toString(Qt::ISODate)); // Test the setter that takes a QString p.setValue(QLatin1String("stringint"), "123"); // and the setter that takes a QL1C p.setValue(QContactPhoneNumber::FieldNumber, "1234"); /* Presence test (const char * version) */ QVERIFY(p.hasValue("string")); QVERIFY(p.hasValue("date")); QVERIFY(p.hasValue("datetime")); QVERIFY(p.hasValue("int")); QVERIFY(p.hasValue("stringdate")); QVERIFY(p.hasValue("stringdatetime")); QVERIFY(p.hasValue("stringint")); QVERIFY(p.hasValue(QContactPhoneNumber::FieldNumber.latin1())); QVERIFY(!p.hasValue("non existent field")); /* QLatin1Constant version */ QVERIFY(p.hasValue(QContactPhoneNumber::FieldNumber)); QVERIFY(!p.hasValue(QContactAddress::FieldCountry)); /* Again with QString version */ QVERIFY(p.hasValue(QLatin1String("string"))); QVERIFY(p.hasValue(QLatin1String("date"))); QVERIFY(p.hasValue(QLatin1String("datetime"))); QVERIFY(p.hasValue(QLatin1String("int"))); QVERIFY(p.hasValue(QLatin1String("stringdate"))); QVERIFY(p.hasValue(QLatin1String("stringdatetime"))); QVERIFY(p.hasValue(QLatin1String("stringint"))); QVERIFY(p.hasValue(QString(QLatin1String(QContactPhoneNumber::FieldNumber)))); QVERIFY(!p.hasValue(QLatin1String("non existent field"))); /* string accessors with const char* key */ QCOMPARE(p.value("string"), QString("This is a string")); QCOMPARE(p.value("date"), d.toString(Qt::ISODate)); QCOMPARE(p.value("datetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value("int"), QString("6")); QCOMPARE(p.value("stringdate"), d.toString(Qt::ISODate)); QCOMPARE(p.value("stringdatetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value("stringint"), QString("123")); QCOMPARE(p.value(QContactPhoneNumber::FieldNumber.latin1()), QString("1234")); /* string accessor with QL1C key */ QCOMPARE(p.value(QContactPhoneNumber::FieldNumber), QString("1234")); /* string accessors with QString key */ QCOMPARE(p.value(QLatin1String("string")), QString("This is a string")); QCOMPARE(p.value(QLatin1String("date")), d.toString(Qt::ISODate)); QCOMPARE(p.value(QLatin1String("datetime")), dt.toString(Qt::ISODate)); QCOMPARE(p.value(QLatin1String("int")), QString("6")); QCOMPARE(p.value(QLatin1String("stringdate")), d.toString(Qt::ISODate)); QCOMPARE(p.value(QLatin1String("stringdatetime")), dt.toString(Qt::ISODate)); QCOMPARE(p.value(QLatin1String("stringint")), QString("123")); QCOMPARE(p.value(QString(QLatin1String(QContactPhoneNumber::FieldNumber))), QString("1234")); /* Variant accessor with const char * key */ QCOMPARE(p.variantValue("string"), QVariant(QString("This is a string"))); QCOMPARE(p.variantValue("date"), QVariant(d)); QCOMPARE(p.variantValue("datetime"), QVariant(dt)); QCOMPARE(p.variantValue("int"), QVariant((int)6)); QCOMPARE(p.variantValue("stringdate"), QVariant(d.toString(Qt::ISODate))); QCOMPARE(p.variantValue("stringdatetime"), QVariant(dt.toString(Qt::ISODate))); QCOMPARE(p.variantValue("stringint"), QVariant(QString("123"))); QCOMPARE(p.variantValue(QContactPhoneNumber::FieldNumber.latin1()), QVariant(QString("1234"))); /* Variant accessor with QL1C key */ QCOMPARE(p.variantValue(QContactPhoneNumber::FieldNumber), QVariant(QString("1234"))); /* Variant accessor with QString key */ QCOMPARE(p.variantValue(QLatin1String("string")), QVariant(QString("This is a string"))); QCOMPARE(p.variantValue(QLatin1String("date")), QVariant(d)); QCOMPARE(p.variantValue(QLatin1String("datetime")), QVariant(dt)); QCOMPARE(p.variantValue(QLatin1String("int")), QVariant((int)6)); QCOMPARE(p.variantValue(QLatin1String("stringdate")), QVariant(d.toString(Qt::ISODate))); QCOMPARE(p.variantValue(QLatin1String("stringdatetime")), QVariant(dt.toString(Qt::ISODate))); QCOMPARE(p.variantValue(QLatin1String("stringint")), QVariant(QString("123"))); QCOMPARE(p.variantValue(QLatin1String(QContactPhoneNumber::FieldNumber)), QVariant(QString("1234"))); /* Typed accessors, string first, const char* key */ QCOMPARE(p.value<QString>("string"), QString("This is a string")); QCOMPARE(p.value<QString>("date"), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("datetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("int"), QString("6")); QCOMPARE(p.value<QString>("stringdate"), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("stringdatetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("stringint"), QString("123")); QCOMPARE(p.value<QString>(QContactPhoneNumber::FieldNumber.latin1()), QString("1234")); /* Now individual original types */ QCOMPARE(p.value<QDate>("date"), d); QCOMPARE(p.value<QDateTime>("datetime"), dt); QCOMPARE(p.value<int>("int"), 6); /* now latin constant keys */ QCOMPARE(p.value<QString>(QContactPhoneNumber::FieldNumber), QString("1234")); /* Typed accessors, string first, QString key */ QCOMPARE(p.value<QString>(QLatin1String("string")), QString("This is a string")); QCOMPARE(p.value<QString>(QLatin1String("date")), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>(QLatin1String("datetime")), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>(QLatin1String("int")), QString("6")); QCOMPARE(p.value<QString>(QLatin1String("stringdate")), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>(QLatin1String("stringdatetime")), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>(QLatin1String("stringint")), QString("123")); QCOMPARE(p.value<QString>(QLatin1String(QContactPhoneNumber::FieldNumber)), QString("1234")); QCOMPARE(p.value<QDate>(QLatin1String("date")), d); QCOMPARE(p.value<QDateTime>(QLatin1String("datetime")), dt); QCOMPARE(p.value<int>(QLatin1String("int")), 6); /* Now cross types that should fail */ QDate id; QDateTime idt; QCOMPARE(p.value<QDate>("string"), id); QCOMPARE(p.value<QDate>("int"), id); QCOMPARE(p.value<QDate>("stringint"), id); QCOMPARE(p.value<QDateTime>("string"), idt); QCOMPARE(p.value<QDateTime>("int"), idt); QCOMPARE(p.value<QDateTime>("stringint"), idt); QCOMPARE(p.value<int>("date"), 0); QCOMPARE(p.value<int>("datetime"), 0); QCOMPARE(p.value<int>("string"), 0); QCOMPARE(p.value<int>("stringdate"), 0); QCOMPARE(p.value<int>("stringdatetime"), 0); /* Cross types that should work.. */ QCOMPARE(p.value<int>("stringint"), 123); QCOMPARE(p.value<QDate>("stringdate"), d); QCOMPARE(p.value<QDateTime>("stringdatetime"), dt); QCOMPARE(p.value<QDate>("datetime"), d); QCOMPARE(p.value<QDate>("stringdatetime"), d); QCOMPARE(p.value<QDateTime>("date"), ddt); QCOMPARE(p.value<QDateTime>("stringdate"), ddt); /* Now set everything again */ QVariantMap emptyValues; QVariantMap values = p.variantValues(); QStringList keys = values.keys(); foreach (const QString& key, keys) QVERIFY(p.setValue(key, QVariant())); QCOMPARE(p.variantValues(), emptyValues); QVERIFY(p.variantValues().count() == 0); QVERIFY(!p.hasValue("string")); QVERIFY(!p.hasValue("date")); QVERIFY(!p.hasValue("datetime")); QVERIFY(!p.hasValue("int")); QVERIFY(!p.hasValue("stringdate")); QVERIFY(!p.hasValue("stringdatetime")); QVERIFY(!p.hasValue("stringint")); QVERIFY(!p.hasValue("non existent field")); QVERIFY(p.value("string") == QString()); QVERIFY(p.variantValue("string") == QVariant()); values.insert("string", "This is a string"); values.insert("date", d); values.insert("datetime", dt); values.insert("int", (int)6); values.insert("stringdate", d.toString(Qt::ISODate)); values.insert("stringdatetime", dt.toString(Qt::ISODate)); values.insert("stringint", "123"); values.insert("string", QString("This is a string")); /* Set values */ keys = values.keys(); foreach (const QString& key, keys) QVERIFY(p.setValue(key, values.value(key))); /* Now repeat the tests with our bulk set map */ QVERIFY(p.hasValue("string")); QVERIFY(p.hasValue("date")); QVERIFY(p.hasValue("datetime")); QVERIFY(p.hasValue("int")); QVERIFY(p.hasValue("stringdate")); QVERIFY(p.hasValue("stringdatetime")); QVERIFY(p.hasValue("stringint")); QVERIFY(!p.hasValue("non existent field")); /* String accessors */ QCOMPARE(p.value("string"), QString("This is a string")); QCOMPARE(p.value("date"), d.toString(Qt::ISODate)); QCOMPARE(p.value("datetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value("int"), QString("6")); QCOMPARE(p.value("stringdate"), d.toString(Qt::ISODate)); QCOMPARE(p.value("stringdatetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value("stringint"), QString("123")); /* Typed accessors, string first */ QCOMPARE(p.value<QString>("string"), QString("This is a string")); QCOMPARE(p.value<QString>("date"), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("datetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("int"), QString("6")); QCOMPARE(p.value<QString>("stringdate"), d.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("stringdatetime"), dt.toString(Qt::ISODate)); QCOMPARE(p.value<QString>("stringint"), QString("123")); /* Now individual original types */ QCOMPARE(p.value<QDate>("date"), d); QCOMPARE(p.value<QDateTime>("datetime"), dt); QCOMPARE(p.value<int>("int"), 6); /* Now cross types that should fail */ QCOMPARE(p.value<QDate>("string"), id); QCOMPARE(p.value<QDate>("int"), id); QCOMPARE(p.value<QDate>("stringint"), id); QCOMPARE(p.value<QDateTime>("string"), idt); QCOMPARE(p.value<QDateTime>("int"), idt); QCOMPARE(p.value<QDateTime>("stringint"), idt); QCOMPARE(p.value<int>("date"), 0); QCOMPARE(p.value<int>("datetime"), 0); QCOMPARE(p.value<int>("string"), 0); QCOMPARE(p.value<int>("stringdate"), 0); QCOMPARE(p.value<int>("stringdatetime"), 0); /* Cross types that should work.. */ QCOMPARE(p.value<int>("stringint"), 123); QCOMPARE(p.value<QDate>("stringdate"), d); QCOMPARE(p.value<QDateTime>("stringdatetime"), dt); QCOMPARE(p.value<QDate>("datetime"), d); QCOMPARE(p.value<QDate>("stringdatetime"), d); QCOMPARE(p.value<QDateTime>("date"), ddt); QCOMPARE(p.value<QDateTime>("stringdate"), ddt); /* Reset again */ values = p.variantValues(); keys = values.keys(); foreach (const QString& key, keys) QVERIFY(p.setValue(key, QVariant())); QCOMPARE(p.variantValues(), emptyValues); /* Check that we can add a null variant */ //QVERIFY(p.setValue("nullvariant", QVariant())); //QVERIFY(p.hasValue("nullvariant")); //QCOMPARE(p.value("nullvariant"), QString()); //QCOMPARE(p.variantValue("nullvariant"), QVariant()); //QVERIFY(p.removeValue("nullvariant")); //QVERIFY(p.values().count() == 0); /* Check that adding a value, then setting it to null updates it */ //QVERIFY(p.setValue("string", QString("string value"))); //QCOMPARE(p.values().count(), 1); //QCOMPARE(p.value("string"), QString("string value")); //QVERIFY(p.setValue("string", QVariant())); //QCOMPARE(p.values().count(), 1); //QVERIFY(p.hasValue("string")); //QVERIFY(p.removeValue("string")); //QCOMPARE(p.values().count(), 0); /* See if adding a null QString triggers the same behaviour */ //QVERIFY(p.setValue("string", QString("string value"))); //QCOMPARE(p.values().count(), 1); //QCOMPARE(p.value("string"), QString("string value")); //QVERIFY(p.setValue("string", QString())); //QCOMPARE(p.values().count(), 1); //QVERIFY(p.hasValue("string")); //QVERIFY(p.removeValue("string")); //QCOMPARE(p.values().count(), 0); /* Check adding a null value removes the field */ p.setValue("string", "stringvalue"); QVERIFY(p.variantValues().contains("string")); QVERIFY(p.value("string") == QString("stringvalue")); p.setValue("string", QVariant()); QVERIFY(!p.variantValues().contains("string")); /* Check adding a field whose value is an empty string */ p.setValue("string", ""); QVERIFY(p.variantValues().contains("string")); QVERIFY(p.value("string") == QString("")); /* Check accessing a missing value */ QCOMPARE(p.value("nonexistent"), QString()); QVERIFY(p.setValue("nonexistent", "changed my mind")); QCOMPARE(p.value("nonexistent"), QString("changed my mind")); /* Check removing a missing value */ QVERIFY(!p.removeValue("does not exist")); QVERIFY(!p.removeValue(QLatin1String("does not exist"))); QVERIFY(!p.removeValue(QContactAddress::FieldCountry)); p.setValue("stringint", "555"); p.setValue(QContactPhoneNumber::FieldNumber, "1234"); /* Check removing a real value */ QVERIFY(p.removeValue("string")); QVERIFY(p.removeValue(QLatin1String("stringint"))); QVERIFY(p.removeValue(QContactPhoneNumber::FieldNumber)); }
void tst_QContactDetail::classHierarchy() { QContactDetail f1; QContactDetail f2; QVERIFY(f1.isEmpty()); QVERIFY(f2.isEmpty()); QContactPhoneNumber p1; p1.setNumber("123456"); QVERIFY(!p1.isEmpty()); QVERIFY(p1.definitionName() == QContactPhoneNumber::DefinitionName); QContactName m1; m1.setFirstName("Bob"); QVERIFY(!m1.isEmpty()); QVERIFY(m1.definitionName() == QContactName::DefinitionName); QVERIFY(p1 != m1); QVERIFY(f1 == f2); f1 = p1; // f1 is a phonenumber QVERIFY(f1 == p1); f1 = f1; // assign to itself QVERIFY(f1 == f1); QVERIFY(f1 == p1); QVERIFY(f1 != f2); QVERIFY(p1 != f2); p1 = p1; // assign leaf class to itself QVERIFY(p1 == p1); QVERIFY(f1 == p1); QVERIFY(p1 == f1); f2 = f1; // f2 = f1 = phonenumber QVERIFY(f1 == f2); QVERIFY(f2 == f1); QVERIFY(f2 == p1); QVERIFY(f1 == p1); f1 = m1; // f1 = name, f2 = phonenumber QVERIFY(f1 == m1); QVERIFY(f1 != f2); QVERIFY(f2 == p1); QContactPhoneNumber p2(f2); // p2 = f2 = phonenumber QVERIFY(p1 == p2); QVERIFY(p1 == f2); QCOMPARE(p2.number(), p1.number()); QCOMPARE(p2.number(), QString("123456")); p2 = p1; // phone number to phone number QVERIFY(p1 == p2); QVERIFY(p1 == f2); QCOMPARE(p2.number(), p1.number()); QCOMPARE(p2.number(), QString("123456")); p2.setNumber("5678"); // NOTE: implicitly shared, this has caused a detach so p1 != 2 QVERIFY(p1 != p2); QVERIFY(p1 == f2); QVERIFY(p2 != f2); QCOMPARE(p2.number(), QString("5678")); QCOMPARE(p1.number(), QString("123456")); /* Bad assignment */ p2 = m1; // assign a name to a phone number QVERIFY(p2 != m1); QVERIFY(p2.definitionName() == QContactPhoneNumber::DefinitionName); // should still be a phone number though QVERIFY(p2.isEmpty()); /* copy ctor */ QContactName m2(m1); QVERIFY(m2 == m1); /* another bad assignment */ m2 = p2; // phone number to a name QVERIFY(m2 != m1); QVERIFY(m2.definitionName() == QContactName::DefinitionName); QVERIFY(m2.isEmpty()); /* Check contexts are considered for equality */ p2 = QContactPhoneNumber(); // new id / detach p2.setNumber(p1.number()); p2.setContexts(QContactDetail::ContextHome); QVERIFY(p1 != p2); p2.removeValue(QContactDetail::FieldContext); // note, context is a value. QVERIFY(p1 == p2); // different ids but same values should be equal /* Copy ctor from valid type */ QContactDetail f3(p2); QVERIFY(f3 == p2); QVERIFY(f3.definitionName() == QContactPhoneNumber::DefinitionName); /* Copy ctor from invalid type */ QContactPhoneNumber p3(m1); QVERIFY(p3 != m1); QVERIFY(p3.definitionName() == QContactPhoneNumber::DefinitionName); QVERIFY(p3.isEmpty()); /* Copy ctore from invalid type, through base type */ f3 = m1; QContactPhoneNumber p4(f3); QVERIFY(p4 != f3); QVERIFY(p4.definitionName() == QContactPhoneNumber::DefinitionName); QVERIFY(p4.isEmpty()); /* Try a reference */ p1.setNumber("123456"); QContactDetail& ref = p1; QVERIFY(p1.number() == "123456"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "123456"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "123456"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Try changing the original */ p1.setNumber("56789"); QVERIFY(p1.number() == "56789"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "56789"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "56789"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Try changing the reference */ ref.setValue(QContactPhoneNumber::FieldNumber, "654321"); QVERIFY(p1.number() == "654321"); QVERIFY(p1.value(QContactPhoneNumber::FieldNumber) == "654321"); QVERIFY(ref.value(QContactPhoneNumber::FieldNumber) == "654321"); QVERIFY(p1 == ref); QVERIFY(ref == p1); /* Random other test */ NonMacroCustomDetail md; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.setValue("key", "value")); QVERIFY(!md.isEmpty()); md.doAssign(md); // self assignment QVERIFY(!md.isEmpty()); QVERIFY(md.value("key") == "value"); QContactDetail mdv; mdv = md; QVERIFY(mdv.definitionName() == "malicious"); QVERIFY(mdv.value("key") == "value"); md = mdv; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.value("key") == "value"); NonMacroCustomDetail2 md2; QVERIFY(md2.setValue("key", "value")); QVERIFY(md2.definitionName() == "malicious"); QVERIFY(md2.value("key") == "value"); md2.doAssign(md); QVERIFY(md2 == md); md2 = md; QVERIFY(md.definitionName() == "malicious"); QVERIFY(md.value("key") == "value"); // Self assignment md2.doAssign(md2); QVERIFY(md2.definitionName() == "malicious"); QVERIFY(md2.value("key") == "value"); md.doAssign(md2); QVERIFY(md == md2); // Assigning something else QContactPhoneNumber pn; pn.setNumber("12345"); md2.doAssign(pn); QVERIFY(md2.isEmpty()); QVERIFY(md2.definitionName() == "malicious"); NonMacroCustomDetail mdb(pn); QVERIFY(mdb.isEmpty()); QVERIFY(mdb.definitionName() == "malicious"); NonMacroCustomDetail2 md2b(pn); QVERIFY(md2b.isEmpty()); QVERIFY(md2b.definitionName() == "malicious"); }
// ----------------------------------------------------------------------------- // Copy c'tor // ----------------------------------------------------------------------------- // QContactDetail::QContactDetail(const QContactDetail& other) { mValue = other.value(""); }