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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QVariant::toBool() не работает как надо  (Прочитано 3557 раз)
RomiX
Гость
« : Апрель 12, 2011, 19:17 »

написал простенький парсер для настроек хранящихся в вот таком виде:
can_edit=0\n
can_add=1\n
...
код:
Код:
    QStringList list = text.split("\n");

    int count = list.count();

    for(int i = 0; i < count; ++i) {
        QStringList params = list[i].split("=");

        QMessageBox::information(0, "", params[0] + " === " + params[1]);
        if(QVariant(params[1]).toBool())
            QMessageBox::warning(0, "", "true");
        else
            QMessageBox::warning(0, "", "false");
    }
проблема в том что если парсить обычную строку то всё ок, а вот если вытащить эту строку из бд, то QVariant::toBool() постоянно возвращает true, в чём может быть проблема?Непонимающий??
пробовал писать и просто 0 и false результат один - true
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 12, 2011, 20:44 »

Почитайте внимательно назначение класса QVariant:
Цитировать
The QVariant class acts like a union for the most common Qt data types.
т.е. он используется для хранения, а не для конвертации из одного типа в другой.

Цитировать
написал простенький парсер для настроек хранящихся в вот таком виде:
А чем не устроил QSettings?
Записан

Qt 5.11/4.8.7 (X11/Win)
RomiX
Гость
« Ответ #2 : Апрель 12, 2011, 20:50 »

под настройками имел ввиду права доступа пользователей, они должны хранится и загружаться из бд, думал что если использую QVariant то в последствии если понадобится хранить дату, время и пр. не нужно будет делать ничего лишнего
Записан
zenden
Гость
« Ответ #3 : Апрель 12, 2011, 20:59 »

RomiX
Я подозреваю, что БД может возвращать текст, содержащий помимо возврата строки ещё и перенос каретки "\r\n". Поэтому советую написать:
Код
C++ (Qt)
params[1].toInt()

вместо QVariant(params[1]).toBool()

а еще пишите  QStringList list = text.split("\n", QString::SkipEmptyParts);
иначе ваш код вылетает с ошибкой "ASSERT failure in QList<T>::operator[]: "index out of range""
« Последнее редактирование: Апрель 12, 2011, 21:07 от zenden » Записан
RomiX
Гость
« Ответ #4 : Апрель 13, 2011, 16:55 »

точно! \r\n всё работает спс
« Последнее редактирование: Апрель 13, 2011, 17:59 от RomiX » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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