Russian Qt Forum

Qt => Общие вопросы => Тема начата: Авварон от Май 12, 2009, 18:49



Название: QString в char*
Отправлено: Авварон от Май 12, 2009, 18:49
как адекватно перевести QString в сишный массив чаров? Способов куча, но полученный массив нужно скормить функции ldap_initialize(LDAP*, char*). Проблема в том, что на экран выводится всё верно в любом из способов, а вот функции нравится только конвертация через std::string
То есть такой код работает:
Код:
    QString str("ldap://localhost/");
    const char * ldapuri = str.toStdString().c_str();
    int ret = ldap_initialize(&cur_session, ldapuri);
Другие варианты (через Ascii, Latin1 и тп - нет). Как сделать без std строки?


Название: Re: QString в char*
Отправлено: pastor от Май 12, 2009, 19:34
Код
C++ (Qt)
int ret = ldap_initialize(&cur_session, str.toLocal8Bit().constData());


Название: Re: QString в char*
Отправлено: Авварон от Май 12, 2009, 19:50
ага, проблема я так понял в том, что ф-ии конвертации возвращают объект, лежащий в стеке и после присвоения стек благополучно сворачивается, удаляя указатель... Кстати мой пример всё-таки не работает:)


Название: Re: QString в char*
Отправлено: pastor от Июнь 19, 2009, 10:21
Разобрался что не работало?


Название: Re: QString в char*
Отправлено: Авварон от Июнь 19, 2009, 10:45
говорю же - временный объект (значение toLocal8Bit()) удалялся после вычисления выражения, снося char*, сохраненный во временную переменную, своим деструктором. Спасибо за помощь


Название: Re: QString в char*
Отправлено: fuCtor от Июнь 24, 2009, 08:55
Кусок:
>> str.toLocal8Bit().constData()

Можно заменить на:
qPrintable(str).


Название: Re: QString в char*
Отправлено: kuzulis от Июнь 24, 2009, 10:07
А вот к примеру иная задачка: нужно из char* в QString преобразовать строку.. но получается ерунда какаят:
Код:
....
CHAR res[65535];
DWORD retval=QueryDosDeviceA("COM1", res, 65535);
QString tmp = QString("retval : %1").arg(retval);
qDebug() << tmp;
qDebug() << res;
QString str;
str.fromAscii(res);
qDebug() << str;
....

выводит:
Цитировать
D:\projects\QSerialDevice_24062009_1700\examples\devices>release\default.exe
"retval : 17"
\Device\Serial0
""


Название: Re: QString в char*
Отправлено: Rcus от Июнь 24, 2009, 10:17
fromAscii, fromLocal8Bit, fromUtf8 - статические методы класса QString


Название: Re: QString в char*
Отправлено: kuzulis от Июнь 24, 2009, 11:40
И??


Название: Re: QString в char*
Отправлено: Авварон от Июнь 24, 2009, 12:44
str.fromAscii(res); заменить на str = QString::fromAscii(res);


Название: Re: QString в char*
Отправлено: Белый пони от Июль 02, 2010, 15:06
У мня не получается так. Вот кусок кода:

Вот кусок кода:
Код:
QString str = m_ui->lineFName->text();
QByteArray ba = str.toLocal8Bit() ;
char *tempChar = new char[100];
tempChar = ba.data();
FileName = tempChar;

Потом  char* FileName использую для открытия файла:
Код:
ofstream myfile;
myfile.open( FileName );

Но вместо этого появляются файлы, с совершенно не читаемыми названиями. Пробовал вместо toLocal8Bit - toAscii , toLatin1, toUtf8. Ничо не помогает:(
Чо делать?


Название: Re: QString в char*
Отправлено: Гурман от Июль 02, 2010, 15:12
Код:
extern openFile( char* fileName );
...
QString qstrFileName = m_ui->lineFName->text();
...
openFile( qstrFileName.toLocal8Bit().data() );

так понятно?

то есть, преобразовывать из QString в char* в самый последний момент, не таскать везде указатель char*


Название: Re: QString в char*
Отправлено: Белый пони от Июль 02, 2010, 15:41
Код:
extern openFile( char* fileName );
...
QString qstrFileName = m_ui->lineFName->text();
...
openFile( qstrFileName.toLocal8Bit().data() );

так понятно?

то есть, преобразовывать из QString в char* в самый последний момент, не таскать везде указатель char*

Спасибо! Заработало :)

Я правда пока не понял, почему он на передваемый char* ругался, но теперь всё окей ;D


Название: Re: QString в char*
Отправлено: Гурман от Июль 02, 2010, 15:51
Цитировать
Я правда пока не понял, почему он на передваемый char* ругался

там несколько бредовых моментов было, из-за ненужного использования QByteArray