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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QVariant  (Прочитано 3964 раз)
ритт
Гость
« : Апрель 30, 2008, 02:52 »

захотел странного: имею переменную типа QVariant::Type и надо создать пустой валидный QVariant для этого типа. причём, совсем не хочется явно кастить его, например, через QVariant::toInt или QVariant::toString

сейчас приходится пользоваться подобной конструкцией:
Код:
QVariant::Type type;
//...
QVariant value;
swicth(type)
{
    case QVariant::Int: value = QVariant(0); break;
    case QVariant::Double: value = QVariant(0.0); break;
//...
    case QVariant::String: value = QVariant(QString("")); break;
    default: break;
}

а хочется как-нибудь легко и изящно
что-нибудь вроде
Код:
QVariant value;
value.convert(type)
, только с валидным результатом на выходе
Записан
Sergeich
Гость
« Ответ #1 : Апрель 30, 2008, 03:33 »

Гммм...
Цитировать
QVariant::QVariant ( Type type )

Constructs a null variant of type type.
не канает?
Записан
ритт
Гость
« Ответ #2 : Апрель 30, 2008, 04:18 »

я забыл упомянуть одну маленькую деталь Улыбающийся
результат нужен не просто валидный, но ещё и не нулл

Код:
QVariant value(QVariant::String);
qWarning() << value << value.isValid() << value.isNull();
QVariant value1(QString(""));
qWarning() << value1 << value1.isValid() << value1.isNull();
даст в результате
Цитировать
QVariant(QString, "") true true
QVariant(QString, "") true false

а для
Код:
QVariant value(QVariant::String);
qWarning() << value << value.isValid() << value.isNull();
QSqlField f("fname", QVariant::String);
f.setValue(value);
QSqlDatabase db;
qWarning() << db.driver()->formatValue(f);
даст на выходе нулл, а не пустую квотрированную строку

и башка не соображает как можно и можно ли вообще избавиться от этого изНулл в варианте
Записан
Zmeishe
Гость
« Ответ #3 : Май 16, 2008, 12:54 »

А если породить своего наследника от QVariant? Добавить конструктор с нужным типом и прямо там разрулить Null и Valid.
Записан
ритт
Гость
« Ответ #4 : Май 16, 2008, 13:53 »

будет фактически то же самое, что и в свитче...только в другом блоке кода
ни в ассистанте, ни в сорцах такой возможности не нашёл - видимо, никому не нужно
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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