Составители:
Рубрика:
136
3. void showContacts(QList<QContact> contacts);
Функция отображает список контактов в окне вывода.
4. QContact makeContact(QString firstName, QString lastName, QString phone, QDate birth);
Вспомогательная функция, которая создает новый контакт на основе переданных ей параметров.
Как нетрудно видеть, используя это API, задача решается тривиально, осталось только его
реализовать. Начать можно с выбора менеджера, в котором будут храниться контакты. Список
идентификаторов всех менеджеров можно получить, вызвав метод
QContactManager::availableManagers(). Из полученного списка строк нужно удалить все неисправные
менеджеры (они называются "invalid"). Для работы мы возьмем самый первый доступный менеджер,
создав его по идентификатору, в нашем случае это "memory". Для других платформ идентификатор
может оказаться другим, но так как менеджер создается только один раз в начале программы и из
списка доступных менеджеров, то на работоспособность примера это не повлияет. Затем добавляем в
менеджер тестовые контакты manager->saveContact(&makeContact( "Alice", "Smith", "+79111234567",
QDate(1990, 1, 1)));
Функция makeContact() появилась из-за того, что создание нового контакта в Qt Mobility
достаточно громоздко. Например, для добавления телефонного номера в контакт надо выполнить три
шага:
QContactPhoneNumber phonenumber;
phonenumber.setNumber(phone);
contact.saveDetail(&phonenumber);
Для осуществления выборки в Qt Mobility следует использовать фильтры на основе
QContactFilter. Конечно, никто не может запретить программисту извлечь все контакты и
отфильтровать их самостоятельно, но эта процедура может оказаться очень неэффективной. Для
нашей цели наиболее подходит фильтр QContactDetailRangeFilter, который выбирает значения в
заданном интервале. Перед использованием надо указать поле, в нашем случае дату рождения:
filter.setDetailDefinitionName(
QContactBirthday::DefinitionName,
QContactBirthday::FieldBirthday);
а также интервал возрастов:
filter.setRange(QDate::currentDate().addYears(-till),
QDate::currentDate().addYears(-from));
Обратите внимание, что в контакте хранится не возраст, который меняется со временем, а дата
рождения, которая постоянна, поэтому для настройки фильтра мы вычисляем интервал дат рождения
для желаемых нами возрастов, для чего из текущей даты вычитаем возраст.
Передав настроенный фильтр менеджеру, получаем искомое:
QList<QContact> result = manager->contacts(filter,
QList<QContactSortOrder>(), QStringList());
Последние два параметра пусты и не несут смысловой нагрузки.
Для отображения контактов достаточно пробежаться по их списку и получить атрибуты (details)
каждого контакта. Например, для телефонного номера это выглядит так
contact.detail<QContactPhoneNumber>().number()
Для отправки сообщения к предыдущей процедуре надо добавить использование Messaging.
Сначала нужно выбрать подходящий для отправки SMS аккаунт, для этого воспользуемся
QMessageManager:
QMessageManager messageManager;
QMessageAccountId id;
for each (id, messageManager.queryAccounts()) {
QMessageAccount account(id);
if (account.messageTypes() & QMessage::Sms)
break;
}
Теперь id содержит идентификатор аккаунта для отправки и можно использовать
QMessageService:
Страницы
- « первая
- ‹ предыдущая
- …
- 134
- 135
- 136
- 137
- 138
- …
- следующая ›
- последняя »
