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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сохранять переменную QColor с помощью QSettings?  (Прочитано 8782 раз)
fulkabaster
Гость
« : Февраль 12, 2010, 16:29 »

Для приложения требуется сохранять переменные типа QColor. У класса QSettings нет метода .toColor(), но в классе QVariant есть такое описание:
Цитировать
Because QVariant is part of the QtCore library, it cannot provide conversion functions to data types defined in QtGui, such as QColor, QImage, and QPixmap. In other words, there is no toColor() function. Instead, you can use the QVariant::value() or the qVariantValue() template function. For example:
 QVariant variant;
 ...
 QColor color = variant.value<QColor>();
The inverse conversion (e.g., from QColor to QVariant) is automatic for all data types supported by QVariant, including GUI-related types:
 QColor color = palette().background().color();
 QVariant variant = color;

По этому совету я сделал так. В конструкторе:
Код
C++ (Qt)
QColor *my_color;
QSettings *settings = new QSettings( ... );
QVariant *variant = new QVariant;
*variant = settings->value("my_color", Qt::green);
my_color = new QColor( variant->value<QColor>() );

А при закрытии приложения так:
Код
C++ (Qt)
QSettings *settings = new QSettings( ... );
settings->setValue( "my_color", QVariant(my_color) );

Но при запуске приложения цвет всегда оказывается черным, а в командной строке параллельно появляется сообщение (хотя приложение продолжает работать нормально):
QColor::setNamedColor: Unknown color name 'true'

Подскажите, пожалста, как сэйвить цвета.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Февраль 12, 2010, 16:45 »

Сохраняй по имени цвета , т.е. :
- в сеттингс сохраняеш: QString name () const
- из сеттингса читаеш: void setNamedColor ( const QString & name )

т.е. все будет типа QString

-

PS: а вообще в ассистенте всё расписано
« Последнее редактирование: Февраль 12, 2010, 16:48 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
fulkabaster
Гость
« Ответ #2 : Февраль 12, 2010, 17:21 »

Спасибо.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Февраль 12, 2010, 21:01 »

>>У класса QSettings нет метода .toColor(),
У него и не должно быть такого метода. QSettings всё хранит в виде QVariant

Да и твой стиль работы с QSettings заметно отличается от того, что приведён в асистенте. Есть ли объективная причина менять стиль работы?

Я бы сделал так:
Код
C++ (Qt)
void MainWindow::readSettings()
{
QSettings settings("./my.ini", QSettings::IniFormat);
 
QVariant v = settings.value("color", QColor(Qt::gray));
qDebug() << "Test variant =" << v;
 
QColor c = v.value<QColor>();
qDebug() << "Test color =" << c;
}
 
void MainWindow::writeSettings()
{
QSettings settings("./my.ini", QSettings::IniFormat);
settings.setValue("color", QColor(Qt::green));
}
Промежуточный "QVariant v" нужен только для отладки/демонстрации
« Последнее редактирование: Февраль 12, 2010, 21:02 от lit-uriy » Записан

Юра.
ufna
Гость
« Ответ #4 : Февраль 12, 2010, 21:25 »

Код
C++ (Qt)
QVariant color = albumSts.value("color");
if( color.convert( QVariant::Color ) ) {
// use color.value<QColor>()
}
 

я делаю так во время считки данных

а писать как обычно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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