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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получить значение из QLineEdit и запихнуть в массив char  (Прочитано 10550 раз)
Trademaster
Гость
« : Октябрь 01, 2013, 21:05 »

Как запихнуть значение QLineEdit(что по сути QString) в массив char Непонимающий?
Записан
Bepec
Гость
« Ответ #1 : Октябрь 01, 2013, 22:02 »

Код:
string.toStdString().c_str();
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #2 : Октябрь 01, 2013, 22:07 »

Вопрос - зачем? Как-то так для ASCII символов:

Код
C++ (Qt)
QString s = lineEdit->text();
char *c = reinterpret_cast<char *>(malloc(s.length() + 1));
qstrcpy(c, s.toLatin1());
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


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

еще проще использовать qPrintable(...) тогда и русские символы будут корректно преобразованы
Записан
Trademaster
Гость
« Ответ #4 : Октябрь 02, 2013, 18:44 »

Вопрос - зачем? Как-то так для ASCII символов:

Код
C++ (Qt)
QString s = lineEdit->text();
char *c = reinterpret_cast<char *>(malloc(s.length() + 1));
qstrcpy(c, s.toLatin1());

Зачем Улыбающийся) Ну ,возможно ответ покажется смешным ,но все же. В программе будет  создаваться шифр (если это можно так назвать). Т.е ,есть массив char ,в нем 10 символов. В произвольном порядке символы будут меняться и отправляться на сервер ,сервер же будет переставлять символы назад и  получить корректную информацию (сделано будет для защиты передаваемых данных) . У сервера будет ключ для разгадки шифра ,точнее его часть ,другую часть будет передавать клиент.

p.s просьба не кидаться помидорами , впервые с подобным работаю..
Записан
Bepec
Гость
« Ответ #5 : Октябрь 02, 2013, 18:46 »

Ответ уже был дан Улыбающийся

А ответ с malloc'ом убил меня наповал Веселый
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


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

А ответ с malloc'ом убил меня наповал Веселый

Какой вопрос, такой ответ.
Записан
Trademaster
Гость
« Ответ #7 : Октябрь 02, 2013, 18:55 »

А ответ с malloc'ом убил меня наповал Веселый

Какой вопрос, такой ответ.

Вопрос возможно не обычный и в чем то мог показаться бессмысленным ,но по моему я нормально его изложил Грустный( Так что не ругайте мой вопрос ;DDD
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4744



Просмотр профиля WWW
« Ответ #8 : Октябрь 02, 2013, 18:55 »

без malloc или new массивом можно пользоваться только в месте вызова qPrintable
Записан

Изучением 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
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


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

Вопрос возможно не обычный и в чем то мог показаться бессмысленным ,но по моему я нормально его изложил Грустный( Так что не ругайте мой вопрос ;DDD

Для работы с бинарными данными используй класс QByteArray
Записан
Trademaster
Гость
« Ответ #10 : Октябрь 02, 2013, 19:40 »

еще проще использовать qPrintable(...) тогда и русские символы будут корректно преобразованы

Можно пример использования? ) Судя по вот этому описанию :
const char * qPrintable ( const QString & str )
Returns str as a const char *. This is equivalent to str.toLocal8Bit().constData().

The char pointer will be invalid after the statement in which qPrintable() is used. This is because the array returned by toLocal8Bit() will fall out of scope.
----------
Вот это :
    char log_ch[] = log_c.toLocal8Bit().constData();
или     char log_ch[] =QPrintable(log_c);
Должно работать.
Но я получаю вот такие ошибки :
initializer fails to determine size of log_ch
array must be initialized with a brace-enclosed initializer
Записан
kambala
Джедай : наставник для всех
*******
Online Online

Сообщений: 4744



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

а так делать и нельзя, при чем я уже писал об этом. используй решение Alex Custov'а.
Записан

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

Я не знаю ,может кому пригодится. Вот отличный способ.
QString test = login->text();
    char *charPointer = (char*)test.toUtf8().data();

Самое лучшее решение.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Самое лучшее решение.
Нет, это ошибочное решение.
Указатель будет указывать на уже освобожденную память.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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