Russian Qt Forum
Ноябрь 23, 2024, 23:07 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Сохранить пользовательские настройки таблицы  (Прочитано 7383 раз)
Alex_C
Гость
« : Май 05, 2012, 21:18 »

Собственно хочу посоветоваться. Есть таблица (QTableView+моя переопределенная модель на основе QSqlQueryModel). Есть задача - пользователь для каждой ячейки хочет свои установки фонта/цвета/алигн и т.п.
раньше на Дельфи все делалось просто - там для каждой колонке это все есть. Сохранить-восстановить не вопрос.
В Qt есть все намного больше. Вот по этому и вопрос: модель переопределил - на data все выводится. Вот даже не знаю как сказать.. Это кашерно на data() считывать данные из QSettins?
Записан
Bepec
Гость
« Ответ #1 : Май 06, 2012, 12:36 »

Я бы сказал - очень не кошерно. Даже скорее вообще не кошерно, помоему...

Я б поступил проще - в модели создал бы список палитр (ну или цветов, смотря какая реализация),  и считывал/записывал только в начале работы и конце работы программы.
Записан
Alex_C
Гость
« Ответ #2 : Май 06, 2012, 19:36 »

Я б поступил проще - в модели создал бы список палитр (ну или цветов, смотря какая реализация),  и считывал/записывал только в начале работы и конце работы программы.

Вот абсолютно согласен...! Именно и хочу считывать - записывать только в начале/конце работы программы. На счет списка палитр и думал.. Но пока не придумал Улыбающийся Понял - направление правильное - буду думать дальше)))
Записан
Alex_C
Гость
« Ответ #3 : Май 08, 2012, 11:16 »

Вопрос: а возможно ли настройки для модели установить в начале загрузки программы через model()->setData также как это можно сделать для заголовка?
Поясню на примере:

Код:
    QString fieldName;
    for(int i = 0; i < model()->columnCount(); i++)
    {
        fieldName = getFieldNameByIndex(i);
        model()->setHeaderData(i, Qt::Horizontal,
                               setting->value("Column" + QVariant(i).toString() + "Name",
                                              fieldName).toString());
        setColumnHidden(i, setting->value("Column" +
                                          QVariant(i).toString() + "Hidden").toBool());
    }

здесь установки заголовков установили. И сделать что то аналогичное:

Код:
        model()->setData(index, myFont, Qt::FontRole);
        model()->setData(index, QColor(Qt::green), Qt::TextColorRole);

но здесь первый параметр у setData - QModelIndex, по этому также как заголовком не получится пройтись по столбцам, установив для них единые настройки.
Записан
Bepec
Гость
« Ответ #4 : Май 08, 2012, 21:45 »

Я ему в лоб, он себе по лбу.

Я тебе предлагаю сделать свою функцию установки/записи/чтения цветов, а ты мне предлагаешь извращённый(в тематику первой части предложения) вариант использования стандартных настроек.
Записан
Alex_C
Гость
« Ответ #5 : Май 08, 2012, 23:45 »

Я тебе предлагаю сделать свою функцию установки/записи/чтения цветов, а ты мне предлагаешь извращённый(в тематику первой части предложения) вариант использования стандартных настроек.

Да не ругайся. Сделал уже, давно причем :
Код:
struct CellView
{
    QFont font;
    QColor fontColor;
    QColor backgroundColor;
    Qt::AlignmentFlag aligment;
};

далее
Код:
   
CellView s;
 for(int i = 0; i < model()->columnCount(); i++)
    {
        fieldName = getFieldNameByIndex(i);
        s.font = qvariant_cast<QFont>(setting->value("Column" + QVariant(i).toString() + "Font",
                                fieldName));
        s.fontColor = qvariant_cast<QColor>(setting->value("Column" + QVariant(i).toString() + "Color",
                                     fieldName));
        s.backgroundColor = qvariant_cast<QColor>(setting->value("Column" + QVariant(i).toString() + "BackColor",
                                           fieldName));
        s.aligment = Qt::AlignmentFlag(setting->value("Column" + QVariant(i).toString() + "Aligment",
                                                      fieldName).toInt());
        m_cellView->replace(i, s);

    }
}
далее етот s .передовать  в модель.
Записан
Bepec
Гость
« Ответ #6 : Май 09, 2012, 23:00 »

Как вариант сгодится Подмигивающий

Хм... Я б посоветовал такую фигню (не в обиду, или укор, просто много букаф там) хранить в файле рядом с прогой, а не засорять реестр. Ибо насколько я помню, в Qt удаление записей с реестра оч муторное и не до конца работает Подмигивающий
Записан
Alex_C
Гость
« Ответ #7 : Май 10, 2012, 08:44 »

Хм... Я б посоветовал такую фигню (не в обиду, или укор, просто много букаф там) хранить в файле рядом с прогой, а не засорять реестр. Ибо насколько я помню, в Qt удаление записей с реестра оч муторное и не до конца работает Подмигивающий

Совершенно согласен - я все настройки только в ini-файлах храню. Так и скомпа на комп проще программуу переносить, да и не нужно прав администратора, чтоб на семерке в реестр писать.
Записан
Serr500
Гость
« Ответ #8 : Май 10, 2012, 09:54 »

В ветку HKCU можно писать без прав администратора. А .ini в Program Files либо не запишется вообще, либо отобразится в Virtual Store.
Записан
V1KT0P
Гость
« Ответ #9 : Май 10, 2012, 10:13 »

В ветку HKCU можно писать без прав администратора. А .ini в Program Files либо не запишется вообще, либо отобразится в Virtual Store.
Для этого существует отдельная папка для каждого пользователя. Мало того что она решает проблему с записью, так еще она решает важную задачу: отдельные настройки приложения для каждого пользователя. Те кто создают ini файлы там где может быть запрещена запись являются ССЗБ.
Записан
Bepec
Гость
« Ответ #10 : Май 10, 2012, 10:17 »

Serr500 я писал же - в Qt удаление записей плохо реализовано. Можно удалить записи, а каталоги удалить нельзя. Т.е. структура папок в реестре останется и будет глаза мозолить.

Сам когда то пытался делать установщик и уткнулся в этот затык. Запись делете - пожалуйста. Папку - фиг. Потому остаётся мусор.

PS А если нельзя писать в program files, любая программа, хранящая там настройки(или изменяющая свои файлы), работать не будет. А таких % 90, если не все 100.

PPS писать ini можно и в папку юзверя. Так, ради прикола Подмигивающий

update to Виктор:

Заблокированная папка Program Files => невозможность установки программы => программа не установлена => программа не работает => нефиг устанавливать её с разрешёнными правилами, а использовать без них => надо в установщике просто дать выбор папки для установки => профит. А тупые пользователи, да "пересекретничавшие" администраторы испоганят всё. 
Записан
V1KT0P
Гость
« Ответ #11 : Май 10, 2012, 10:28 »

Заблокированная папка Program Files => невозможность установки программы => программа не установлена => программа не работает => нефиг устанавливать её с разрешёнными правилами, а использовать без них => надо в установщике просто дать выбор папки для установки => профит. А тупые пользователи, да "пересекретничавшие" администраторы испоганят всё. 
Ну вот я работаю из под ограниченной учетки, а программы устанавливаю из под админа. Правда я редко устанавливаю программы в Program Files, но те что установил туда работают нормально =).
Записан
Bepec
Гость
« Ответ #12 : Май 10, 2012, 10:48 »

Угу. А какие программы, если не секрет? Тот же тотал коммандер/опера/лиса хранят часть настроек  в Common Files в Program Files. Подмигивающий
Записан
V1KT0P
Гость
« Ответ #13 : Май 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

Но я уже выработал привычку ставить все на другой раздел.
Записан
Bepec
Гость
« Ответ #14 : Май 10, 2012, 12:39 »

Половина приведённых тобой программ пишет в common files Подмигивающий

А другой раздел - да, правильное решение Подмигивающий

Я себе как SSD приобрёл, все проги напрочь с системного диска убрал. Нафиг надо дополнительную нагрузку Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.117 секунд. Запросов: 21.