Russian Qt Forum

Qt => Базы данных => Тема начата: RomiX от Апрель 12, 2011, 19:17



Название: QVariant::toBool() не работает как надо
Отправлено: 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


Название: Re: QVariant::toBool() не работает как надо
Отправлено: GreatSnake от Апрель 12, 2011, 20:44
Почитайте внимательно назначение класса QVariant:
Цитировать
The QVariant class acts like a union for the most common Qt data types.
т.е. он используется для хранения, а не для конвертации из одного типа в другой.

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


Название: Re: QVariant::toBool() не работает как надо
Отправлено: RomiX от Апрель 12, 2011, 20:50
под настройками имел ввиду права доступа пользователей, они должны хранится и загружаться из бд, думал что если использую QVariant то в последствии если понадобится хранить дату, время и пр. не нужно будет делать ничего лишнего


Название: Re: QVariant::toBool() не работает как надо
Отправлено: zenden от Апрель 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""


Название: Re: QVariant::toBool() не работает как надо
Отправлено: RomiX от Апрель 13, 2011, 16:55
точно! \r\n всё работает спс