Название: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 05, 2012, 21:18 Собственно хочу посоветоваться. Есть таблица (QTableView+моя переопределенная модель на основе QSqlQueryModel). Есть задача - пользователь для каждой ячейки хочет свои установки фонта/цвета/алигн и т.п.
раньше на Дельфи все делалось просто - там для каждой колонке это все есть. Сохранить-восстановить не вопрос. В Qt есть все намного больше. Вот по этому и вопрос: модель переопределил - на data все выводится. Вот даже не знаю как сказать.. Это кашерно на data() считывать данные из QSettins? Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 06, 2012, 12:36 Я бы сказал - очень не кошерно. Даже скорее вообще не кошерно, помоему...
Я б поступил проще - в модели создал бы список палитр (ну или цветов, смотря какая реализация), и считывал/записывал только в начале работы и конце работы программы. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 06, 2012, 19:36 Я б поступил проще - в модели создал бы список палитр (ну или цветов, смотря какая реализация), и считывал/записывал только в начале работы и конце работы программы. Вот абсолютно согласен...! Именно и хочу считывать - записывать только в начале/конце работы программы. На счет списка палитр и думал.. Но пока не придумал :) Понял - направление правильное - буду думать дальше))) Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 08, 2012, 11:16 Вопрос: а возможно ли настройки для модели установить в начале загрузки программы через model()->setData также как это можно сделать для заголовка?
Поясню на примере: Код: QString fieldName; здесь установки заголовков установили. И сделать что то аналогичное: Код: model()->setData(index, myFont, Qt::FontRole); но здесь первый параметр у setData - QModelIndex, по этому также как заголовком не получится пройтись по столбцам, установив для них единые настройки. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 08, 2012, 21:45 Я ему в лоб, он себе по лбу.
Я тебе предлагаю сделать свою функцию установки/записи/чтения цветов, а ты мне предлагаешь извращённый(в тематику первой части предложения) вариант использования стандартных настроек. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 08, 2012, 23:45 Я тебе предлагаю сделать свою функцию установки/записи/чтения цветов, а ты мне предлагаешь извращённый(в тематику первой части предложения) вариант использования стандартных настроек. Да не ругайся. Сделал уже, давно причем : Код: struct CellView Код:
Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 09, 2012, 23:00 Как вариант сгодится ;)
Хм... Я б посоветовал такую фигню (не в обиду, или укор, просто много букаф там) хранить в файле рядом с прогой, а не засорять реестр. Ибо насколько я помню, в Qt удаление записей с реестра оч муторное и не до конца работает ;) Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 10, 2012, 08:44 Хм... Я б посоветовал такую фигню (не в обиду, или укор, просто много букаф там) хранить в файле рядом с прогой, а не засорять реестр. Ибо насколько я помню, в Qt удаление записей с реестра оч муторное и не до конца работает ;) Совершенно согласен - я все настройки только в ini-файлах храню. Так и скомпа на комп проще программуу переносить, да и не нужно прав администратора, чтоб на семерке в реестр писать. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Serr500 от Май 10, 2012, 09:54 В ветку HKCU можно писать без прав администратора. А .ini в Program Files либо не запишется вообще, либо отобразится в Virtual Store.
Название: Re: Сохранить пользовательские настройки таблицы Отправлено: V1KT0P от Май 10, 2012, 10:13 В ветку HKCU можно писать без прав администратора. А .ini в Program Files либо не запишется вообще, либо отобразится в Virtual Store. Для этого существует отдельная папка для каждого пользователя. Мало того что она решает проблему с записью, так еще она решает важную задачу: отдельные настройки приложения для каждого пользователя. Те кто создают ini файлы там где может быть запрещена запись являются ССЗБ.Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 10, 2012, 10:17 Serr500 я писал же - в Qt удаление записей плохо реализовано. Можно удалить записи, а каталоги удалить нельзя. Т.е. структура папок в реестре останется и будет глаза мозолить.
Сам когда то пытался делать установщик и уткнулся в этот затык. Запись делете - пожалуйста. Папку - фиг. Потому остаётся мусор. PS А если нельзя писать в program files, любая программа, хранящая там настройки(или изменяющая свои файлы), работать не будет. А таких % 90, если не все 100. PPS писать ini можно и в папку юзверя. Так, ради прикола ;) update to Виктор: Заблокированная папка Program Files => невозможность установки программы => программа не установлена => программа не работает => нефиг устанавливать её с разрешёнными правилами, а использовать без них => надо в установщике просто дать выбор папки для установки => профит. А тупые пользователи, да "пересекретничавшие" администраторы испоганят всё. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: V1KT0P от Май 10, 2012, 10:28 Заблокированная папка Program Files => невозможность установки программы => программа не установлена => программа не работает => нефиг устанавливать её с разрешёнными правилами, а использовать без них => надо в установщике просто дать выбор папки для установки => профит. А тупые пользователи, да "пересекретничавшие" администраторы испоганят всё. Ну вот я работаю из под ограниченной учетки, а программы устанавливаю из под админа. Правда я редко устанавливаю программы в Program Files, но те что установил туда работают нормально =).Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 10, 2012, 10:48 Угу. А какие программы, если не секрет? Тот же тотал коммандер/опера/лиса хранят часть настроек в Common Files в Program Files. ;)
Название: Re: Сохранить пользовательские настройки таблицы Отправлено: V1KT0P от Май 10, 2012, 11:04 Угу. А какие программы, если не секрет? Тот же тотал коммандер/опера/лиса хранят часть настроек в Common Files в Program Files. ;) Основные программы которые работают : 7-Zip, Audacity, Softimage 2011, FileZilla Server, GIMP, Mathcad 14, Firefox, Thunderbird, OpenVPN, OpenOffice, Opera, Pidgin, ViewletCam2, VirtualDub, Wireshark, XilisoftИ те что приходится запускать из-под админа: Proteus 7 Professional Но я уже выработал привычку ставить все на другой раздел. Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 10, 2012, 12:39 Половина приведённых тобой программ пишет в common files ;)
А другой раздел - да, правильное решение ;) Я себе как SSD приобрёл, все проги напрочь с системного диска убрал. Нафиг надо дополнительную нагрузку :) Название: Re: Сохранить пользовательские настройки таблицы Отправлено: V1KT0P от Май 10, 2012, 15:59 Половина приведённых тобой программ пишет в common files ;) В Common files запрещено мне писать, но программы тем не менее работают. Вот только надоедает от админа запускать Firefox для обновления.Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Bepec от Май 11, 2012, 00:02 Не буду спорить - тут все тонкости в нюансах ;)
PS ну частично правы оба - писать некошерные программы - нехорошо, но и устанавливать кошерные программы в места, урезанные правами - нехорошо. Для того выбор каталога и существует ;) Название: Re: Сохранить пользовательские настройки таблицы Отправлено: Alex_C от Май 11, 2012, 08:47 Я очень долго думал над этой проблемой, т.к. одним из условий работы моей программы является возможность работы с флешки , вообще не зависимо от компьютера + максимально возможная работы в любой конфигурации/прав пользователя (на сколько это возможно).
Все что ниже написано - естественно сделано для винды. При запуске моя программа проверяет следующее: 1. Проверка версии винды. 2. Если операционка >= WinXP, проверяем права администратора и проверяем, установлена ли программа в ProgramFiles. Причем права админа определяются через CheckTokenMembership - это на семерке позволяет узнать, запущена ли программа через меню "Запустить от имени администратора". 3. Если права админа есть - пишем ini в папку программы. Если нет - определяем путь куда винда предлагает пользовательские настройки писать. Такой вариант позволяет достичь максимально возможной свободы по установке программы в любые папки по желанию пользователя. |