Russian Qt Forum

Qt => Вопросы новичков => Тема начата: МП© от Март 07, 2012, 18:05



Название: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 18:05
Приветствую,
помогите, пожалуйста, разобраться с сохранением настроек в файл,
Ассистент помог мало,
необходимо сохранять шрифт главного окна в файл .ini который находится в одной директории с проектом и при новом открытии применять записанный шрифт.

С помощью ассистента и найденных примеров сделал:
Код
C++ (Qt)
void MainWindow::readSettings()
{
   QSettings settings("/nastr.ini",QSettings::IniFormat);
   settings.beginGroup("MainWindow");
   settings.value("font").toString();
   settings.endGroup();
}
 
void MainWindow::writeSettings()
{
    QSettings settings("/nastr.ini",QSettings::IniFormat);
    settings.beginGroup("MainWindow");
    settings.setValue("font", font());
    settings.endGroup();
}
 
НО шрифт не записывается в файл и соответственно не применяется, как это сделать правильно?

ЗЫ если видели,что подобное обсуждалось и есть пример, то буду рад ссылке.


Название: Re: QSetting .ini начало
Отправлено: mutineer от Март 07, 2012, 18:06
А в чем проблема-то?


Название: Re: QSetting .ini начало
Отправлено: LisandreL от Март 07, 2012, 18:12
А в чем проблема-то?
Может в том, что считанный шрифт он почему-то преобразовал в строку и никуда не сохранил?


Название: Re: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 18:14
Проблема в том, что в файл ничего не записывается,
возможно либо путь к файлу неправильно указал, либо еще в чем-то..


Название: Re: QSetting .ini начало
Отправлено: mutineer от Март 07, 2012, 18:18
А в чем проблема-то?
Может в том, что считанный шрифт он почему-то преобразовал в строку и никуда не сохранил?
а вдруг ему так и надо?))) проблема ж в исходном сообщении не описана


Название: Re: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 18:32
проблема описана, необходимо сохранять настройки и при новом запуске применять


Название: Re: QSetting .ini начало
Отправлено: Alex Custov от Март 07, 2012, 18:36
Почему путь указан как /nastr.ini ?

Код
C++ (Qt)
QSettings settings(QCoreApplication::applicationDirPath() + QDir::separator() + "settings.ini", QSettings::IniFormat);

P.S. применения шрифта в этом примере не видно, кстати. Что означает settings.value("font").toString(); ?


Название: Re: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 19:03
на примере сохранения геометрии окна:
Код
C++ (Qt)
void MainWindow::readSettings()
{
   ...
   restoreGeometry(settings.value("geometry").toByteArray());
   ...
}
 
void MainWindow::writeSettings()
{
   ...
     settings.setValue("geometry", saveGeometry());
    ...
}
 

как аналогично сделать для шрифтов?

для шрифтов нет "restore"
и в какой тип надо преобразовывать шрифт?


Название: Re: QSetting .ini начало
Отправлено: Alex Custov от Март 07, 2012, 19:09
для шрифтов нет "restore"

Шрифты устанавливаются через QWidget::setFont()

и в какой тип надо преобразовывать шрифт?

В QFont, очевидно.

Код
C++ (Qt)
QFont f = qvariant_cast<QFont>(settings.value("font"));


Название: Re: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 19:38
если я правильно понял должно быть так:
Код
C++ (Qt)
void MainWindow::readSettings()
{
   QSettings settings(QCoreApplication::applicationDirPath() + QDir::separator() + "nastr.ini", QSettings::IniFormat);
   settings.beginGroup("MainWindow");
   QFont f = qvariant_cast<QFont>(settings.value("font"));
   settings.endGroup();
}
 
void MainWindow::writeSettings()
{
    QSettings settings(QCoreApplication::applicationDirPath() + QDir::separator() + "nastr.ini", QSettings::IniFormat);
    settings.beginGroup("MainWindow");
    settings.setValue("font", setFont());
    settings.setValue("geometry", saveGeometry());
    settings.endGroup();
}
 
но на setFont() выдает ошибку, что не так?


Название: Re: QSetting .ini начало
Отправлено: LisandreL от Март 07, 2012, 20:22
но на setFont() выдает ошибку, что не так?
Вот почему сразу не написать какую?
И setFont() в вашем коде нет.


Название: Re: QSetting .ini начало
Отправлено: МП© от Март 07, 2012, 20:25
Код
C++ (Qt)
settings.setValue("font", setFont());
 

Код
C++ (Qt)
ошибка: no matching function for call to 'MainWindow::setFont()'
 


Название: Re: QSetting .ini начало
Отправлено: kambala от Март 07, 2012, 20:27
setFont() устанавливает шрифт, а не возвращает существующий. а в методе чтения значение шрифта теряется - его ж надо установить через setFont().