Сохранение нескольких Qstring в QByteArray |
Здравствуйте, гость ( Вход | Регистрация )
Сохранение нескольких Qstring в QByteArray |
MishaUA |
5.7.2013, 3:45
Сообщение
#1
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
У меня есть структура с определеными опциями, к примеру:
Здесь хранятся настройки, мне их нужно писать/читать через ini файл, для этого, я помещал структуру в QByteArray и писал в файл. Проблема в том, что после чтения из ini файла, все строки QString не работают, если перед записью в нее была помещена какая то строка (если не была, то с нее читается пустая строка). Оно и не удивительно, ведь QString - это класс. Сейчас у меня на уме только один выход - заменить все строки в структуре на байтовые массивы (типа char str[100]), но с ними работать не удобно. Может кто подскажет более оптимальный вариант? |
|
|
Litkevich Yuriy |
5.7.2013, 4:35
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
По делу:
Зарегистрируй свой тип данных с помощью qRegisterMetaType(), а затем помещай его в QSettings (см. также QVariant::value<...>() ) Просто так: зачем тебе typedef? структуры как и классы принято описывать так:
|
|
|
MishaUA |
5.7.2013, 10:08
Сообщение
#3
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
а можно немного подробней на счет регистрации нового типа?
Просто из доки мне не сильно понятно |
|
|
Litkevich Yuriy |
5.7.2013, 10:20
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Если ты не используешь свой тип данных в качестве аргументов сигналов и слотов, то тебе достаточно зарегистрировать тип с помощью макроса:
Q_DECLARE_METATYPE (там пример понятный) |
|
|
MishaUA |
5.7.2013, 10:43
Сообщение
#5
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
эм, как раз эту структуру я использую в качестве аргумента сигналов и слотов))))
|
|
|
MishaUA |
5.7.2013, 11:26
Сообщение
#6
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
а, стоп, я использую эту структуру в сигналах и слотах просто как структуру (точнее - указатель на нее). Значит, мне можно объявить новый тип данных просто с помощью Q_DECLARE_METATYPE?
|
|
|
Litkevich Yuriy |
5.7.2013, 11:47
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
MishaUA |
5.7.2013, 14:19
Сообщение
#8
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
так, вот что я сделал:
Но при клике на pushButton, в дебугере пишет: Цитата QVariant::save: unable to save type 'mainStruct' (type id: 1037). ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp, line 1869 Invalid parameter passed to C runtime function. Invalid parameter passed to C runtime function. И программа вылетает. Где я тупонул? |
|
|
Litkevich Yuriy |
5.7.2013, 15:03
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Видимо, для QSettings придётся полностью описать тип.
Смотри это |
|
|
MishaUA |
5.7.2013, 16:11
Сообщение
#10
|
Участник Группа: Участник Сообщений: 185 Регистрация: 28.4.2013 Пользователь №: 3810 Спасибо сказали: 13 раз(а) Репутация: 0 |
тоесть, нужно описывать каждый элемент структуры?
|
|
|
Текстовая версия | Сейчас: 29.3.2024, 14:52 |