Название: массив строк? Отправлено: DmitryKSL от Май 31, 2010, 12:09 В чем хранить данные по пользователям, где будут 5 полей для каждого пользователя (ФИО, подразделение, должность и тд.) ? Заранее количество пользователей неизвестно, думаю не более сотни.
Дайте простой пример. Название: Re: массив строк? Отправлено: Авварон от Май 31, 2010, 12:29 в структуре
Название: Re: массив строк? Отправлено: ecspertiza от Май 31, 2010, 12:34 Ну тут два варианта, либо как говорит Авварон, в структуре, либо создать отдельный класс, разницы особой вроде нету.
Код: struct User или Код: class User Название: Re: массив строк? Отправлено: mkv от Май 31, 2010, 12:40 QMap как вариант...
Название: Re: массив строк? Отправлено: DmitryKSL от Май 31, 2010, 16:03 Ну тут два варианта, либо как говорит Авварон, в структуре, либо создать отдельный класс, разницы особой вроде нету. Спасибо, об этом даже не подумал. Для меня это пока сложновато. У меня все данные строковые, я думал структура для разных типов данных придумана. В 1С,например, есть таблица значений, добавляешь нужные столбцы, потом строки по необходимости. Я думал что тут что-то подобное существует. В принципе, структура подойдет.Насчет QMap ничего не понял. Здесь переводили, http://doc.crossplatform.ru/qt/4.5.0/mainclasses.html (http://doc.crossplatform.ru/qt/4.5.0/mainclasses.html) но куда ни зайду, в основном английский. Может где-то еще есть справочная документация на русском? Название: Re: массив строк? Отправлено: Sancho_s_rancho от Май 31, 2010, 16:36 Хех. Все зависит от ситуации. Мне иногда нравится делать так typedef QHash<int, QStringList> myType;
int - уникальный идентификатор сотрудника. QStringList(или структура на ваш вкус) - его данные. Название: Re: массив строк? Отправлено: crossly от Май 31, 2010, 17:10 если хранить надо постоянно то может лучше в БД??
Название: Re: массив строк? Отправлено: DmitryKSL от Июнь 01, 2010, 07:26 Хех. Все зависит от ситуации. Мне иногда нравится делать так typedef QHash<int, QStringList> myType; Ничего не понял.Про структуру читал, как использовать для одного сотрудника разобрался. Как ее задействовать для группы сотрудников не понятно.int - уникальный идентификатор сотрудника. QStringList(или структура на ваш вкус) - его данные. Короче начал писать класс. Такое ощущение что не то делаю. Вот заголовочный файл: Код: #ifndef USERINFO_H Код: #include "userinfo.h" 1) Считываю данные из домена скриптом (заполняю ими мой класс - не сделано) пока так записал в конструкторе моего приложения Код: userinfo User; 3) По этому логину нахожу нужные данные в классе. Тут я понимаю надо добавить в класс строковые переменные. Они должны заполняться методом Find моего класса. 4) после вызова метода find считываю нужные свойства (переменные класса). Теперь собственно вопрос. Имеет ли смысл такой подход или все можно сделать значительно проще? Как в QStringList найти нужную строку, вернее ее индекс? Название: Re: массив строк? Отправлено: Sancho_s_rancho от Июнь 01, 2010, 09:59 Код: QString emp = QObject::tr("Вася"); //ключ, по которому будет производится поиск. Код: #ifndef USERINFO_H int - это уникальный идентификатор, т.к. Имена могут совпадать у разных людей. А userinfo - информация о них. Если предположить, что имена уникальны, то все становится совсем просто. QHash тебе все сам найдет. ПИ.СИ. Для userinfo необходимо реализовать оператор сравнения и присваивания. Название: Re: массив строк? Отправлено: DmitryKSL от Июнь 01, 2010, 12:07 int - это уникальный идентификатор, т.к. Имена могут совпадать у разных людей. А userinfo - информация о них. Если предположить, что имена уникальны, то все становится совсем просто. QHash тебе все сам найдет. в качестве ключа, использовал login. Для текущей задачи достаточно. ПИ.СИ. Для userinfo необходимо реализовать оператор сравнения и присваивания. Код: QString login="test"; вот продолжение тестового кода, выводит то что и требуется :) Код: login="test2"; Код: stroka=tr(myProcess->readAllStandardOutput()); Логин ФИО Телефон и т.д. Т.е. в строке присутствуют переносы строки, и по ним как-то надо разбить строку на подстроки чтобы поместить их в мой класс. Как это сделать? Название: Re: массив строк? Отправлено: Sancho_s_rancho от Июнь 01, 2010, 14:46 К тебе на вход приходит QByteArray, т.е. массив байтов. Чтобы дальше жилось спокойно надо его перегнать в юникодную QString.
Делаем как-то так QTextCodec *inputEncoding = QTextCodec::codecForName(тут название кодировки в которой приходит); QString str = inputEncoding->toUnicode( QByteArray входяший массив символов); Затем можно попробовать строку разбить методом QString::split(), указав символом разбиения перевод строки. Название: Re: массив строк? Отправлено: SABROG от Июнь 01, 2010, 20:09 Завязывайте вызывать tr() для каждой строки, никто не будет переводить слова типа "Вася" или "ул. Шпалерная д.5 кв.13" на английский или любой другой язык.
Название: Re: массив строк? Отправлено: DmitryKSL от Июнь 02, 2010, 11:55 Затем можно попробовать строку разбить методом QString::split(), указав символом разбиения перевод строки. Большое спасибо за советы, с этим разобрался. Но вот нюанс один с User = *(myBase.find(stroka)); Если ключ не найден, то моя программа вываливается с ошибкой. Как проверить существует ли такой ключ в базе? Название: Re: массив строк? Отправлено: Sancho_s_rancho от Июнь 02, 2010, 18:45 Если вы не будете читать документацию, то удачи вам не видать, т.к. «удача сопутствует подготовленным умам».
find возвращает итератор на найденный элемент. Если элемент НЕ найден, то итератор указывает на несуществующий элемент под названием end (iterator QHash::end ()). Соответвенно сначала необходимо проверить не является ли полученный итератор этим самым концом. А потом, если не является то получить значение по этому адресу "*". Название: Re: массив строк? Отправлено: DmitryKSL от Июнь 03, 2010, 04:52 Если вы не будете читать документацию, то удачи вам не видать Я бы с радостью, только где взять документацию на русском? По F1 мне открывается справка, в которой пару заголовков обычно переведено. Может я не тот файл перевода скачал? В книгах не встречал полного описания классов, только то что нужно в рамках какой то задачи, а это совсем не то.Ну эту проблему я решил: Код: QHash <QString,userinfo>::const_iterator i=myBase.find("test"); |