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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Пример из Assistant'a  (Прочитано 4053 раз)
finka
Гость
« : Сентябрь 19, 2007, 12:01 »

Пример взят из описания класса QVariant:

Код:
QDataStream out(...);
QVariant v(123);                // The variant now contains an int
int x = v.toInt();                // x = 123
out << v;                          // Writes a type tag and an int to out
v = QVariant("hello");          // The variant now contains a QByteArray
v = QVariant(tr("hello"));      // The variant now contains a QString
int y = v.toInt();               // y = 0 since v cannot be converted to an int
QString s = v.toString();       // s = tr("hello")  (see QObject::tr())
out << v;                         // Writes a type tag and a QString to out
...
QDataStream in(...);            // (opening the previously written stream)
in >> v;                        // Reads an Int variant
int z = v.toInt();              // z = 123
qDebug("Type is %s",            // prints "Type is int"
        v.typeName());
v = v.toInt() + 100;            // The variant now hold the value 223
v = QVariant(QStringList());

Кто-нибудь, объясните, пожалуйста, почему в v из in читается именно значение типа int?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #1 : Сентябрь 19, 2007, 12:09 »

А кто сказал, что читается int?  Улыбающийся
Чтение происходит из потока, где содержатся просто байты, а уж потом прочитанное приводится к int посредством вызова v.toInt(). Кроме того, конструктор QVariant вызывается с int. Если смущает typeName, который выдает int, то вот что говорит Assistant:
Цитировать
const char * QVariant::typeName () const
Returns the name of the type stored in the variant. The returned strings describe the C++ datatype used to store the data: for example, "QFont", "QString", or "QValueList". An Invalid variant returns 0.

В этом случае выдается базовый тип языка - int.
« Последнее редактирование: Сентябрь 19, 2007, 12:14 от Hellraiser » Записан
finka
Гость
« Ответ #2 : Сентябрь 19, 2007, 12:19 »

Тогда откуда v известно, сколько байт из потока читать?
И что значит "Writes a type tag and an int to out"? Что еще кроме самого числа пишется в out?
Непоняяятно...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Сентябрь 19, 2007, 12:19 »

Кто-нибудь, объясните, пожалуйста, почему в v из in читается именно значение типа int?

А что собственно говоря должно считываться? Есть в коде такой комментарий "opening the previously written stream". А в предыдущий поток ты что писал: сначало число типа int (123), затем строку QString. Вот первым мы исчитали значение типа int. За более подробной информацией обращайся к ассистанту - см. QDataStream.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Сентябрь 19, 2007, 12:30 »

Вот, посмотрите вот этот раздел в ассистанте: Format of the QDataStream Operators. В таблице представлены все типы поддерживаемые QDataStream а также их способ записис в поток. Все вопросы должны отпасть сми собой.

Код:
QVariant

The type of the data (quint32)
The null flag (qint8)
The data of the specified type
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
finka
Гость
« Ответ #5 : Сентябрь 19, 2007, 12:37 »

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


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