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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 136 137 [138] 139 140 ... 142
2056  Qt / Общие вопросы / Re: QByteArray rawData to double[] : Июнь 02, 2014, 12:02
Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
А кто мешает сразу читать эти double без левого для данного случая QByteArray Непонимающий
Как? Я пробовал получить указатель на элемент, возвращаемый operator[] - не получилось
2057  Qt / Общие вопросы / QByteArray rawData to double[] : Июнь 02, 2014, 11:29
Здравствуйте!
Имеется массив данных QByteArray прочитанных из бинарного файла, который содержит записи значений double.
Мне необходимо вывести эти значения в десятичном виде.
Сейчас я делаю следующее: с помощью data() я получаю указатель на начало массива, прибавляю к нему i * sizeof(double), где i - порядковый номер интересующего меня числа. В переменную double tmp я копирую сырые данные из получившегося указателя memcpy(&tmp, массив->data() + i * sizeof(double), sizeof(double)). Вывожу tmp на экран.
Это работает, но как-то уж больно криво выглядит.
Как было бы наиболее корректно написать?
2058  Qt / Model-View (MV) / Re: Динамическое добавление колонок в QTableView : Июнь 02, 2014, 11:15
главное было проговорить
Код:
emit layoutChanged();
2059  Qt / Model-View (MV) / Динамическое добавление колонок в QTableView : Июнь 02, 2014, 11:07
Здравствуйте. Не совсем разобрался с этой темой.
У меня имеются некоторые данные в одномерном массиве. Количество значений фиксированное. Они выводятся в представление в одну колонку.
В головном виджете, где сидит это представление имеется спинбокс для регулирования количества колонок, в которые будут выводится значения этого массива.
Я сделал связку спинбокса и модели valueChanged->setColumnCount. Значение columns, которое изменяется слотом setColumnCount хранится в классе модели и возвращается при вызове переопределённого columnCount.
Не могу понять, по каким причинам представление не перестраивается под новые значения количества колонок и строк. reset и dataChanged не помогает...
Буду признателен за помощь
2060  Qt / Многопоточное программирование, процессы / Отлавливание ошибок процесса : Май 22, 2014, 16:58
Здравствуйте.
Во вложении имеется картинка. Я написал простое приложение, которое запускает QProcess и отлавливает его потоки. Сам процесс при нормальных условиях работает в режиме командной строки (запускается из bat файла). В случае, если лицензия на запускаемый процесс занята, то он выдаёт ошибку, как показано на скриншоте, причём, как видно, stderr пуст.
Есть ли какие-нибудь методы по отлову подобных сообщений или что можно придумать, чтобы понять, что программа выдала ошибку. У меня на уме вертится только проверка процента ЦПУ, занимаемого данным процессом.
2061  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 31, 2013, 20:00
Дополняя предыдущий ответ: перед записью надо установить QDataStream::setByteOrder с аргументом чтобы понравился дельфи (вероятно QDataStream::LittleEndian)

Да, согласен. Вышеизложенное я изначально пробовал воплотить - не понравилось.
2062  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 30, 2013, 11:19
Да, согласен, что код ужасен.

А в этой же теме хочу спросить по поводу writeRawData.
Каким образом, не используя эту функцию можно записать данные (особенно double), чтобы они в последствии могли быть считаны в среде разработки delphi?
2063  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 18, 2013, 14:52
Нашёл выход, более подходящий для меня!
Запись структуры оставить такой же, как я описывал выше. Но, конечно, как в моём случае вписываются лишние 5 * sizeof(QString) байт - думаю, для меня это не критично.

Перед чтением файла нужно сохранить значения в каждом из QString. А после чтения восстановить их на прежние места.
Иными словами:
Код:
char* strings[] =
{
reinterpret_cast<char*>(&settings.wayType),
reinterpret_cast<char*>(&settings.materialName),
reinterpret_cast<char*>(&settings.component1.name),
reinterpret_cast<char*>(&settings.component2.name),
reinterpret_cast<char*>(&settings.component3.name)
};
char oldValues[sizeof(strings) / sizeof(char*) * sizeof(QString)];
for (int i = 0; i < sizeof(strings) / sizeof(char*); i++)
{
char* string = strings[i];
for (int j = 0; j < sizeof(QString) / sizeof(char); j++)
{
oldValues[sizeof(QString) / sizeof(char) * i + j] = string[j];
}
}

in.readRawData(reinterpret_cast<char*>(&settings), sizeof(settings));

for (int i = 0; i < sizeof(strings) / sizeof(char*); i++)
{
char* string = strings[i];
for (int j = 0; j < sizeof(QString) / sizeof(char); j++)
{
string[j] = oldValues[sizeof(QString) / sizeof(char) * i + j];
}
}

in >> settings.wayType;
in >> settings.materialName;
in >> settings.component1.name;
in >> settings.component2.name;
in >> settings.component3.name;
в середине можно было использовать memcpy, но я его не особо люблю.
Теперь изменение структуры никак не повлияет на код чтения/записи. Если не трогать классы.
Спасибо всем за советы.
2064  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 18, 2013, 12:36
а чо QSettings не воспользуетесь?
Так как это не единственное, что я записываю в файл. Туда ещё идёт свыше 1000 QVector

Писать QString в виде бинарного потока в одном процессе и вычитывать в другом это очень опасно, он наверняка имеет какие-то внутренние указатели, которые в другой программе невалидны. Не делай так, записывай всю структуру через QDataStream и операторы записи в поток
вот я про эти указатели и говорю. Как-то мучительно получается по отдельности записывать и считывать каждый элемент в отдельности + при добавлении элементов в структуру нужно искать чтение и запись и снова добавлять... Уверен, что должен быть какой-то другой способ. У меня появились некоторые идеи, сейчас попробую их спрораммировать, позже отпишусь по результатам, может кому полезно будет
2065  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 18, 2013, 11:42
При чтении уже в другой программе:
Код:
in.readRawData(reinterpret_cast<char*>(&settings), sizeof(settings));
где
Код:
QFile file(filePath);
file.open(QIODevice::ReadOnly);
QDataStream in(&file);

для чтения строк изначально написал
Код:
in >> settings.wayType;
in >> settings.materialName;
in >> settings.component1.name;
in >> settings.component2.name;
in >> settings.component3.name;
но, этот код выдавал ошибку при выполнении первой функции. Была какая-то проблема с распределением памяти. Но её я обошёл тем, что для каждой из читаемой строки выполнил метод QString::clear(). Всё пошло гладко, но только по завершению работы приложения выдается ошибка heap corruption detected...

То есть, я полагаю, что при чтении из файла целиком структуры, в элементы QString были записаны какие-то произвольные значения (которые были рабочими при записи в файл). Таким образом, эти значения дают понять, что при выполнении некого деструктора (который выполняется по завершению программы) производится очистка памяти по тем самым значениям, которые были вписаны в структуру из файла, но они являются не актуальными, так как не относятся к выполняемому процессу, а просто были считаны из файла.
2066  Qt / Вопросы новичков / Re: Сериализация QString содержащей структуры. : Май 18, 2013, 11:27
Сама структура:
Код:
#ifndef SOLUTIONSETTINGS_H
#define SOLUTIONSETTINGS_H

class QString;

struct ComponentSettings
{
QString name;
double concentration;
double liquidusTangent;
double distributionRatio;
};

struct SolutionSettings
{
int substrateHeight;
int addingLayerHeight;
int addingLayerCount;
double areaWidth;
double areaDepth;
int NodesPerSize;
int laserSpotDiameter;
int laserPower;
int preheatingTemperature;
int gasTemperature;
int laserSpeed;
int distanceBetweenPasses;
int penetrationRatio;
int delayAfterHeating;
QString wayType;
double delayBetweenPasses;
double calculationTimeStep;
int outputTimeStep;
QString materialName;
double liquidusTemperature;
double coresCount;
double growSpeedRatio;
double interaxialDistance;
double porosity;
double particlesDiameter;
ComponentSettings component1,
  component2,
  component3;
};

#endif

Её записываем в файл.
Код:
out.writeRawData(reinterpret_cast<char*>(&_settings), sizeof(_settings));

out << _settings.wayType
<< _settings.materialName
<< _settings.component1.name
<< _settings.component2.name
<< _settings.component3.name;
binFile.close();
где
Код:
SolutionSettings _settings;
и
Код:
QFile binFile(slmFilePath);
binFile.open(QIODevice::WriteOnly);
QDataStream out(&binFile);
2067  Qt / Вопросы новичков / Сериализация QString содержащей структуры. : Май 17, 2013, 06:09
Всем снова привет!
Есть структура, которую я записываю в бинарный файл с помощью QDataStream::writeRawData.
Отдельно выписываю каждый QString через оператор <<.
При чтении этого файла, чтение структуры проходит успешно. А вот при чтении в QString выдает ошибку (realloc или чё-то там...)
Вскоре понял, что это происходит из-за того значения, которое передаётся в QString при чтении файла. Решил проблему с помощью QString::clear() и последующим чтением QString из файла. Только теперь уже проблема возникла иная: при закрытии программы выскакивает что-то вроде  heap corruped.
Вопрос: какое именно значение из QString записывается при сериализации и как при десериализации избежать переписывания QString переменных или "сохранить нынешние значения QString (которое затирается при деериализации) -> прочитать файл -> восстановить это значение)
Спасибо
2068  Qt / Вопросы новичков / Re: abs : Май 01, 2013, 06:59
ребят, а в qmath функция qreal qFabs(qreal) даёт не то самое, что нужно автору?
2069  Qt / Вопросы новичков / Re: Не могу запустить пример qwt : Май 01, 2013, 06:54
90% это означает, что у тебя в системе болтается qwt, собранная для Qt4, а ты компилиш программу под Qt5.
И вот твоя прога под Qt5 пытается переварить qwt собранную для Qt4.
Если оно действительно так, то автору советую собрать qwt самостоятельно. В папке с исходниками есть инструкция по установке
2070  Qt / Вопросы новичков / Re: Как уникально идентифицировать компьютеры по железу : Май 01, 2013, 06:50
Может поможет...
http://www.prog.org.ru/topic_18762_15.html
Страниц: 1 ... 136 137 [138] 139 140 ... 142

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