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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString to char  (Прочитано 11428 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


Просмотр профиля
« : Октябрь 11, 2013, 18:45 »

Подскажите способы преобразовать QString в массив типа char?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #1 : Октябрь 11, 2013, 19:18 »

http://qt-project.org/doc/qt-5.1/qtcore/qtextcodec.html#fromUnicode
http://qt-project.org/doc/qt-5.1/qtcore/qstring.html#toLocal8Bit
http://qt-project.org/doc/qt-5.1/qtcore/qstring.html#toLatin1
Записан
ComputerMouse
Гость
« Ответ #2 : Октябрь 12, 2013, 19:01 »

Подскажите способы преобразовать QString в массив типа char?

Код:
QString str = "text";
char n [100] = str.toStdString.c_str();
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Октябрь 12, 2013, 19:05 »

Код:
QString str = "text";
char n [100] = str.toStdString.c_str();
И таки думаете это будет работать? Подмигивающий
Записан
Serr500
Гость
« Ответ #4 : Октябрь 12, 2013, 20:03 »

Правильный вариант:
Код:
QString str;
// . . .
std::string std_string = str.toStdString();
char* char_array = new char[std_string.length() + 1];
strcpy(char_array, std_string.c_str());
// . . .
delete char_array;
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Октябрь 12, 2013, 20:12 »

самое проще qPintable(...)
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #6 : Октябрь 12, 2013, 20:25 »

неделю назад же была точно такая же тема
Записан

Изучением 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
Trademaster
Гость
« Ответ #7 : Октябрь 13, 2013, 22:58 »

QString test = login->text();
    char *charPointer = (char*)test.toUtf8().data();


Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Октябрь 13, 2013, 23:00 »

QString test = login->text();
    char *charPointer = (char*)test.toUtf8().data();



Нельзя так делать!
Я вам уже писал. Указатель charPointer будет указывать на уже освобожденную память.
Записан
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #9 : Октябрь 13, 2013, 23:43 »

Правильный вариант:
Код:
QString str;
// . . .
std::string std_string = str.toStdString();
char* char_array = new char[std_string.length() + 1];
strcpy(char_array, std_string.c_str());
// . . .
delete char_array;

Можно обойтись без std_string.
В описании метода все есть: http://qt-project.org/doc/qt-5.1/qtcore/qbytearray.html#data
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
Serr500
Гость
« Ответ #10 : Октябрь 14, 2013, 09:46 »

"Правильный вариант" относилось не к тому, что надо делать именно так, а исправление вот этого:
Код:
QString str = "text";
char n [100] = str.toStdString.c_str();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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