Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/55: Рейтинг темы: голосов - 55, средняя оценка - 4.80
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407

Перевод из QString в double[]

09.07.2019, 11:46. Показов 12255. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть массив и функция которая возвращает строку из QLineEdit. В этот список строк записываются исключительно числа либо целого, либо дробного вида.
C++ (Qt)
1
2
double saveInputData[i] = strtod(NewDialog->Successfull()); 
// создаем массив типа double и присваеваем ему значение которое вернет функция.
Есть много разных способов перевода с QString в double, но постоянно мне выдаются ошибки.
Какую функцию перевода использовать лучше и как правильнее это записать для случая который я привел выше?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2019, 11:46
Ответы с готовыми решениями:

Быстрый перевод double в QString
Простой пример: int main(int argc, char *argv) { for (int i = 0; i < 100000; ++i) { QString::number(-12345.6789); ...

Преобразование double к qstring
Всем привет! Пишу программу, которая получает данные через API, а затем выводит их. Код разбора JSON можно увидеть ниже QJsonDocument...

Преобразование double в QString
Здравствуйте! Возникла проблема с преобразованием double в QString. Вот участок кода: QString toStr = QString::setNum(dResult); ...

27
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
11.07.2019, 16:50  [ТС]
Студворк — интернет-сервис помощи студентам
Анна по жизни, Теперь всегда туда тыкать буду. Спасибо что информируете!
0
279 / 88 / 37
Регистрация: 10.06.2015
Сообщений: 261
11.07.2019, 17:02
Цитата Сообщение от Анна по жизни Посмотреть сообщение
не уверена, что помирает он в конце выражения
Честно говоря, мне кажется, ему больше и негде помирать.
Цитата Сообщение от Анна по жизни Посмотреть сообщение
Конфета находится в data().
И конфета эта указывает, кажется, на освобождённую память.

Отладчик мягко намекает, что так делать не стоит и, если данные по полученному указателю ещё не успели помереть - это просто удачное стечение обстоятельств.

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   QString test = "Eto test 123456789";
    char *ptr = test.toLocal8Bit().data();
 
    for(int i = 0; i < 10; i++)
    {
       qDebug()  << ptr[i];
    }
 
    QByteArray test2 = test.toLocal8Bit();
    ptr = test2.data();
    for(int i = 0; i < 10; i++)
    {
       qDebug()  << ptr[i];
    }
Вывод:

Кликните здесь для просмотра всего текста
i
?
i
?
i
?
P
?
E
t
o

t
e
s
t

1
1
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
11.07.2019, 19:40
Анна по жизни, Вы здесь совершенно не правы.
Ваша цитата
Цитата Сообщение от Анна по жизни Посмотреть сообщение
You can also pass string literals to functions that take QStrings as arguments, invoking the QString(const char *) constructor. Similarly, you can pass a QString to a function that takes a const char * argument using the qPrintable() macro which returns the given QString as a const char *. This is equivalent to calling <QString>.toLocal8Bit().constData().
Говорит вот о таком случае:
C++
1
somefunction(qPrintable(str));
Временный объект, о котором я говорил, здесь будет жить до конца выполнения полного выражения. Т.е. все время выполнение функции. У вас же совсем другая ситуация.

Цитата Сообщение от Анна по жизни Посмотреть сообщение
Но если QByteArray создаётся через функцию QByteArray::fromRawData(const char *data, int size), то никакого копирования не происходит, QByteArray работает с указателем на исходный массив.
Это здесь вообще не при чем. В вашем коде, я напомню:
Цитата Сообщение от Анна по жизни Посмотреть сообщение
C++
1
const char *s = str.toLocal8Bit().data();
преобразование в QByteArray производится путем перекодирования в соответствии с текущей локалью в массив байтов - это всегда копирование и всегда новый буфер. QString не может отдать в QByteArray свои внутренние данные просто потому, что хранит их в UTF32: это - не char.

Цитата Сообщение от Анна по жизни Посмотреть сообщение
не уверена, что помирает он в конце выражения.
Это азы С++.
0
285 / 174 / 62
Регистрация: 13.03.2019
Сообщений: 419
12.07.2019, 11:07
DrOffset,

посмотрела у себя. Действительно, toLocal8Bit().data() везде использую как аргумент для функций, когда надо перейти от кутешных массивов к классическим. В общем-то,ТС это и надо.
Остальное, видимо, фантомные воспоминания от qt 4.8 или даже 3.8. Помнится, я здорово тогда налетела, когда у меня "протухал" указатель на char*, полученный от переменной одного класса, когда "умирала" переменная другого класса.
0
19505 / 10108 / 2463
Регистрация: 30.01.2014
Сообщений: 17,828
12.07.2019, 12:11
Анна по жизни, Собственно теперь осталось рассказать ТС как же на самом деле правильно с учетом всего. Раз мои посты он игнорирует, а вам он, судя по всему, верит безоговорочно, то, видимо, вам и придется это сделать. А то сейчас ведь он пойдет писать код с минами замедленного действия.
0
285 / 174 / 62
Регистрация: 13.03.2019
Сообщений: 419
12.07.2019, 14:01
Цитата Сообщение от DrOffset Посмотреть сообщение
осталось рассказать ТС как же на самом деле правильно с учетом всего.
Раз не отписывлся здесь, значит, вставил вызов как аргумент в функцию и всё сработало.

Добавлено через 1 час 39 минут
DrOffset,
Только что наткнулась на упоминание подобной цепочки вызовов у Роберта Мартина "Чистый код". Примечательный подзаголовок:"Крушение поезда".
0
6 / 3 / 0
Регистрация: 04.05.2018
Сообщений: 407
12.07.2019, 14:10  [ТС]
Цитата Сообщение от Анна по жизни Посмотреть сообщение
Раз не отписывлся здесь, значит, вставил вызов как аргумент в функцию и всё сработало.
Я пишу следующее:
C++ (Qt)
1
QString::number(var);
Для перевода из QString в double. А если вы про что-то другое, то уже все решил. Сделал немного по своему
0
285 / 174 / 62
Регистрация: 13.03.2019
Сообщений: 419
12.07.2019, 16:24
MetMark, мы имели в виду такой вариант:

C++ (Qt)
1
double d = strtod(str.toLocal8Bit().data());
в таком виде внутрь strtod() попадёт валидный указатель char*;

а вот такой вариант не прокатит

C++ (Qt)
1
2
const char*s = str.toLocal8Bit().data();
double d = strtod(s);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2019, 16:24

QString Не точно переводит в double
Всем привет, как в double перевести корректно QString data_double = &quot;1.42542&quot;; double zzz = data_double.toDouble(); ...

QString в Double не точная конвертация
Такой вопрос, делаю калькулятор. Введенное строка преобразуется в число формата double, но если оно не целое то он его не точно передает....

Перевод char* to qstring
Всем доброго времени суток, подскажите как перевести из char* в qstring, именно так. Собственно я пробовал уже пару тройку вариантов, но то...

Перевод из QString в uint16_t
Как перевести?

Перевод lpcstr to qstring
Здравствуйте, я получаю дескриптор проецируемого объекта: LPCTSTR pBuf; pBuf = (LPCTSTR)MapViewOfFile(hMapFile, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru