Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: AcerExtensa от Июнь 23, 2007, 21:46 Всем привет!
Нужна помощ или совет знающих.......... Код: void MyDialog::on_opb_clicked(bool) { Вобщем дело только в этом сдесь: Код: la->setText(fn); la ето Объект QLineEdit Туда записывается Полный путь к файлу....... Все в порядке отображается тоже ОК. далее................ Код: void MyDialog::on_spb_clicked(bool) { Тоже самое что и первое только наоборот...... полный путь к новому файлу в еще одну QLineEdit а теперь проблема: При нажатие на 3ю кнопку должен открыватся 1й файл, производится над ним действия и сохранятся в новый файл....... Для чтения и записи файлов я пользую fread и fwrite, (т.к. все КюТэшные классы для файлов не подходят.... они работают но блин с ними время выполнения увеличевается минут на 40 при файле размером в 500мб) для fread и fwrite(fopen) нужен чар как имя вместо КюСтринга...... делаю следующее Код:
все вроде проходит нормально...... но вот проблема....... иногда файл открывается а иногда нет....... делал слежку за именем(дебаг типо) и вобщем иногда получаю вместо нормального пути к файлу что то вроде Код: !@Fh* Есть какая нибудь еще возможность конвертации QString в char? Я в qt новичек....... Или может что нибудь посоветуете!? Только как я и говорил работать с QT IOшными классами бесполезно.......... очень увеличивается время выполнения операций над файлами........... Буду рад любой помощи или совету! Спасибо заранее! Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: kitov от Июнь 23, 2007, 22:03 Есть ещё пару методов , посмотри в Дизайнере , но все они возвращают QByteArray .
Я всегда пользуюсь QString::toLocal8Bit() , проблем ещё не было . Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: AcerExtensa от Июнь 23, 2007, 22:11 toLatin1() пробовал.......а toLocal8Bit() сегодня попробую........ спасибо!
Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: Steven_Orko от Июнь 24, 2007, 00:51 Тут на форуме подобная вещь уже обсуждалась, но т.к. твой вопрос не связан с этой темой, но ошибку ты делаешь ту же, то...
Насколько я знаю, вызов функции toAscii() возвращает временный массив байт, соответственно, ты пытаешься сохранить указатель на временные данные, которые после вычисления выражения будут удалены. Таким образом, у тебя указатель указывает (сорри, за каламбур) на "мусор". Вот в этом коде ошибка. Код:
Либо копируй куда-либо полученный массив символов, либо используй в каком-либо выражении, где указатель будет валидным во время открытия файла. Что-то наподобии: Код:
Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: kitov от Июнь 24, 2007, 12:12 Точно , я не заметил .
strcpy тебе в помощь Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: pakulo от Июнь 24, 2007, 12:32 а можно еще проще
qPrint(QString("text")) если я правильно понял что нужно QString в char* перевести это макрос тоже самое что и text().toLatin1().data() кажись Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: AcerExtensa от Июнь 24, 2007, 14:26 Цитата: "Steven_Orko" Тут на форуме подобная вещь уже обсуждалась, но т.к. твой вопрос не связан с этой темой, но ошибку ты делаешь ту же, то... Насколько я знаю, вызов функции toAscii() возвращает временный массив байт, соответственно, ты пытаешься сохранить указатель на временные данные, которые после вычисления выражения будут удалены. Таким образом, у тебя указатель указывает (сорри, за каламбур) на "мусор". Вот в этом коде ошибка. Код:
Либо копируй куда-либо полученный массив символов, либо используй в каком-либо выражении, где указатель будет валидным во время открытия файла. Что-то наподобии: Код:
:) ето и было решение проблемы............... Всем спасибо за участие! Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: pastor от Июнь 24, 2007, 18:48 Цитата: "pakulo" а можно еще проще qPrint(QString("text")) если я правильно понял что нужно QString в char* перевести это макрос тоже самое что и text().toLatin1().data() кажись 1) Не qPrint, а qPrintable 2) Эквиваленте не str.toLatin1().data(), а str.toLocal8bit().constData() Название: QT4.3 fread...QString to char*.... прооблема. Отправлено: pakulo от Июнь 25, 2007, 17:28 Цитата: "pastor" 1) Не qPrint, а qPrintable 2) Эквиваленте не str.toLatin1().data(), а str.toLocal8bit().constData() сорри, напутал |