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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу разобрать запись  (Прочитано 2891 раз)
Atridies
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« : Май 06, 2020, 21:18 »

Здравствуйте коллеги!

Потребовалось разобраться с куском кода на Qt (до этого писал на си и чуть-чуть на питоне).
Помогите разобрать запись:

Код:
QDataStream& operator<<(QDataStream& out, const Mode& v) 
{
  out << v.virt << v.buf[0] << v.buf[1];
  return out;
}

1. Что тут делается ?
2. Почему тут несколько << ? (в си это сдвиги).
3. Что за QDataStream?
4. Что за "operator" ?

Заранее спасибо!
Записан
demal
Чайник
*
Offline Offline

Сообщений: 53


Просмотр профиля
« Ответ #1 : Май 06, 2020, 21:32 »

это опрежеление, для того чтобы модель записывать в выходной файл. Посмотри в тырнете на тему как написать собственный оператор записи в поток, а также ввод/вывод на с++. 
QDataStream - класс реализующий запись двоичных данных в поток.
После такого определения будет возможно записывать данные в виде: выходной поток<<записываемые данные,
Записан
Atridies
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #2 : Май 07, 2020, 01:07 »

Благодарю за ответ.

Правильно ли я понимаю, что в out уйдет последовательно: v.virt, потом v.buf[0], потом v.buf[1]  ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Май 07, 2020, 10:44 »

все верно
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Atridies
Новичок

Offline Offline

Сообщений: 3


Просмотр профиля
« Ответ #4 : Май 07, 2020, 13:42 »

Спасибо.

А это будет всё за один раз? Т.е. можно переписать эту запись как:
out << v.virt
out << v.buf[0]
out << v.buf[1];

Или при каждом вызове будет передача соседу и всё ? Т.е.:
out << v.virt
v.virt << v.buf[0]
v.buf[0] << v.buf[1];
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #5 : Май 07, 2020, 13:55 »

А это будет всё за один раз? Т.е. можно переписать эту запись как:
out << v.virt
out << v.buf[0]
out << v.buf[1];

Этот вариант.
Записан

Пока сам не сделаешь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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