![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
whyt |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
добрый день всем. вот возник такой вопрос. имеется некая переменная типа QString, из нее изымается один символ методом Str.mid(1,1), соответственно на выход мы имеем переменную типа QString размером в один символ. теперь вопрос, реально ли эту переменную конвертировать в Char (логично что сам QString нельзя просто так перевести, ибо это строка, а Char - все же символ) ?? курил маны, юзал гугл..толком решения не увидел, а нужно все это для того,чтобы потом перебрать варианты с помощью switch ... case...(на определенный символ - определенное действие).
|
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
const QChar QString::at ( int position ) const
Цитата Returns the character at the given index position in the string. The position must be a valid index position in the string (i.e., 0 <= position < size()). Пойдет? |
|
|
whyt |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
спасибо за совет. буду внимательнее читать маны..сделав таким образом:
CODE const QChar cM=sDate.at(2); switch (cM) { case 'X': { bool ok=true; } } получаю вот такую неприятность "switch quantity not an integer", подозреваю - ошипко кроеца в том,что мы конвертируем в QChar, а switch работает с char,int и тд.. |
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
У меня нет компилятора под рукой, но вот, что пишется в описании класса QChar:
Цитата The QChar class provides a 16-bit Unicode character.
In Qt, Unicode characters are 16-bit entities without any markup or structure. This class represents such an entity. It is lightweight, so it can be used everywhere. Most compilers treat it like a unsigned short. |
|
|
trdm |
![]()
Сообщение
#5
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
если разжуешь задачку, не укусим.
Другими словами: Че надо или че хош сотворить? |
|
|
whyt |
![]()
Сообщение
#6
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
вкратце суть задачи такова.. в бд храниться запись в виде "1ч15м10с", и именно в таком. мне нужно перевести это выражение в минуты. я считываю в переменную типа QString это поле, и начиная c первого символа я перебираю эту переменную,переводя символы в коды ASCII ( в делфях было сделано так - If (Ord(str[1]) >= 48) And (Ord(str[1]) <= 57) - и таким образом я отсеиваю цифры и буквы..и когда получаю цифры (сначала 1 - нужно проанализировать какой символ стоит за буквой, если 'ч' или 'Ч', то я 1 * 60 и получаю количество минут) и так далее..а выбор я произвожу через switch ... case.. можно конечно через if .. else, но это мне неудобно.
|
|
|
trdm |
![]()
Сообщение
#7
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
в какой кодировке сорцы?
погугли насчет юникода http://ru.wikipedia.org/wiki/%D0%9A%D0%B8%...%BE%D0%B4%D0%B5 строки в Qt: QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character. используй конструкторы типа: QChar ( short code ) QChar(0x10e3); т.е. 'ч' будет QChar(0x0447); 'Ч' будет QChar(0x0427); вот с ними и сравнивай в if (cM == QChar(0x0427)) помогло? Сообщение отредактировал trdm - 29.3.2009, 16:42 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
whyt, посмотри описание класса QChar
в списке функций есть несколько штук возвращающих uchar и char |
|
|
whyt |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
сорцы в Юникоде..
щас погуглим, а почему именно эти? а нельзя юзать QChar::QChar ( char ch ) Constructs a QChar corresponding to ASCII/Latin-1 character ch. вот это? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Цитата The conversion functions include unicode() (to a scalar), toLatin1() (to scalar, but converts all non-Latin-1 characters to 0), row() (gives the Unicode row), cell() (gives the Unicode cell), digitValue() (gives the integer value of any of the numerous digit characters), and a host of constructors.
|
|
|
whyt |
![]()
Сообщение
#11
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
ребят,спасибо, сейчас буду все пробовать=)
|
|
|
trdm |
![]()
Сообщение
#12
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
сорцы в Юникоде.. щас погуглим, а почему именно эти? а нельзя юзать QChar::QChar ( char ch ) Если у тебя сорцы в уникоде, то ты просто не сможешь написать QChar ch = QChar ( 'ю' ); или конверть в cp1521 или не выеживайся... Сообщение отредактировал trdm - 29.3.2009, 17:13 |
|
|
molchanoviv |
![]()
Сообщение
#13
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
whyt |
![]()
Сообщение
#14
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
так это..у меня программа должна после будет и под иксами работать и если я щас конвертну в 1251 потом не будет проблем с кодировкой?
QChar::QChar(cM)=str.at(0); вот так я получил ushort code, но опять же..switch c такой переменной отказывается работать.. |
|
|
trdm |
![]()
Сообщение
#15
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
так это..у меня программа должна после будет и под иксами работать и если я щас конвертну в 1251 потом не будет проблем с кодировкой? QChar::QChar(cM)=str.at(0); вот так я получил ushort code, но опять же..switch c такой переменной отказывается работать.. ну и плюнь на свитч, тебе надо несколько букв обработать всего. я бы ифом воспользовался и не парил себе мозг. |
|
|
ViGOur |
![]()
Сообщение
#16
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
SABROG |
![]()
Сообщение
#17
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
Насчет свича, вроде бы можно сделать уникодный литерал: http://www.open-std.org/jtc1/sc22/wg21/doc...2007/n2249.html
Но вот что именно использовать L, U/u я так и не понял. |
|
|
igor_bogomolov |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Ребят, может я чего не понял, поправте меня, если я не в тему.
смотрим что пишет qDebug: warning: QTime("01:15:10") А дальше стандартными методами QTime переводим наше время в минуты. P.S. Не забываем добавить QTextCodec::setCodecForTr(QTextCodec::codecForName("System")); |
|
|
whyt |
![]()
Сообщение
#19
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
нуу это некрасиво..с ифом - то))
но других выходов пока не вижу..сделал так - получил коды символов 'ч' - 1095 'Ч' - 1063 'C' - 1057 'c' - 1089 'М' - 1052 'м' - 1084 а дальше ..
некрасиво, но работает.. товарищи,СПАСИБО всем за помощь!
Причина редактирования: пользуйся тэгом code
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#20
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
ViGOur |
![]()
Сообщение
#21
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Ты луше глянь, какое решение предложил igor_bogomolov!
![]() |
|
|
whyt |
![]()
Сообщение
#22
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
igor_bogomolov, интересно /* побежал смотреть */
|
|
|
igor_bogomolov |
![]()
Сообщение
#23
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
для этго нужно все файлы исходников конвертнуть в локальную кодировку. Я про перевод даты. А кодек только для того чтобы кирилуцу распознать. Там правда придется под себя немного переделывать, если хранится не дата, а отрезок времени 13м07с. Но идея вроде понятна. |
|
|
whyt |
![]()
Сообщение
#24
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
посмотрел предложенный вариант, проблема в том, что вот в этом месте
каждый раз придется переопределять параметр tr("h'ч'm'м'ss'с'"), тк я не знаю какого типа моя запись 10м, 10ч15м, или 15ч ну и если сделать так то при вызове функции для переменной мы получим не 75, а 15 минут..как то крупновато код вставился..модеры, поправьте, если не затруднит Сообщение отредактировал Admin - 29.3.2009, 23:22
Причина редактирования: Подправил тег code
|
|
|
igor_bogomolov |
![]()
Сообщение
#25
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Читайте внимательней документацию.
Цитата каждый раз придется переопределять параметр tr("h'ч'm'м'ss'с'"), тк я не знаю какого типа моя запись 10м, 10ч15м, или 15ч ну и если сделать так то при вызове функции Я лишь предложил метод, реализацию можно додумать. В любом случае выбирать вам. Сообщение отредактировал igor_bogomolov - 29.3.2009, 18:21 |
|
|
whyt |
![]()
Сообщение
#26
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
вопрос немного не по теме..но никто не знает в С++ аналог функции Ord() в Delphi?
|
|
|
SABROG |
![]()
Сообщение
#27
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: ![]() ![]() ![]() |
вопрос немного не по теме..но никто не знает в С++ аналог функции Ord() в Delphi? В C++ этого не требуется, т.к. строки не вынесены в отдельный тип данных и на деле являются все теми же строками Си или массивом, или набором байтов. Если тебе надо сравнивать именно числовые значения (по сути это тоже самое, что и перегруженный оператор сравнения у == QChar/QString/QLatin1String/QLatin1Char), то можно воспользоваться методами QChar::toLatin1(), QChar::toAscii(). Они возвращают значение типа char (-127...+127, размер 1 байт, 256 вариантов значений, тип является не строковым, а числовым, также как Integer) Сообщение отредактировал SABROG - 29.3.2009, 21:54 |
|
|
molchanoviv |
![]()
Сообщение
#28
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 597 Регистрация: 18.7.2008 Из: Саратов Пользователь №: 238 Спасибо сказали: 41 раз(а) Репутация: ![]() ![]() ![]() |
Если еще актуально, то вот мой вариант решения проблемы
На выходе мы получим список состоящий из трех элементов: 6, 12, 23 |
|
|
igor_bogomolov |
![]()
Сообщение
#29
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
whyt |
![]()
Сообщение
#30
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
спасибо за помощь, решение уже есть.
molchanoviv, спасибо за вариант,интересно, но немного не то,что мне нужно. igor_bogomolov, уточнив задачу я понял что всего может быть три вариации букв - 'C' - сутки, 'Ч' - часы,'М' - минуты..а там обрабатываю через if - else и коды символов. если кому - то интересно могу выложить на языке. =) |
|
|
igor_bogomolov |
![]()
Сообщение
#31
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Так С - это сутки
![]() Почему бы и не выложить. Я считаю что конечный результат всегда нужно выкладывать ![]() |
|
|
whyt |
![]()
Сообщение
#32
|
Студент ![]() Группа: Участник Сообщений: 28 Регистрация: 29.3.2009 Пользователь №: 649 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
igor_bogomolov, угу=) сутки
CODE void MainWindow::Minuts(const QString sIn) { int iRez; QString sStr,sDate; bool bEndDigit; iRez=0; sStr="";bEndDigit=false;sDate=sIn; while (sDate.size()>0) { QChar::QChar(cM)=sDate.at(0); //конвертируем первый символ в QChar if (cM>=48 && cM<=57) //проверяем, число это или букво { if (bEndDigit==true) { sStr=""; } sStr=sStr+sDate.mid(0,1); bEndDigit=false; } else { bEndDigit=true; } if (cM==1095 || cM==1063) // если 'Ч' или 'ч' { bool ok; iRez=iRez + sStr.toInt(&ok,10)*60; sStr=""; } if (cM==1057 || cM==1089) // если 'C' или 'c' { bool ok; iRez=iRez + sStr.toInt(&ok,10)*60*24;sStr=""; } if (cM==1052 || cM==1084) // если 'М' или 'м' { bool ok; iRez=iRez + sStr.toInt(&ok,10);sStr=""; } sDate=sDate.mid(1,sDate.size()-1); // выкидываем первый слева символ } } ЗЫ. вот так, единственное что хотелось, так реализовать без if - else, а с помощью switch. Выше в теме описано почему неполучилось) |
|
|
posi4 |
![]()
Сообщение
#33
|
Студент ![]() Группа: Участник Сообщений: 52 Регистрация: 24.4.2009 Пользователь №: 707 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Увидел название темы и решил задать вопрос про char и QString.
Как загнать элемент QString в QDataStream через оператор <<? Вариантов перегрузки у него куча, но для QString'а нету. Напрашивается вариант перегрузить его вручную. Может есть уже написанные варианты или вообще другой способ? |
|
|
BRE |
![]()
Сообщение
#34
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Увидел название темы и решил задать вопрос про char и QString. Как загнать элемент QString в QDataStream через оператор <<? Вариантов перегрузки у него куча, но для QString'а нету. Напрашивается вариант перегрузить его вручную. Может есть уже написанные варианты или вообще другой способ? Как это нет, все есть. QDataStream & operator<< ( QDataStream & stream, const QString & string )ж |
|
|
posi4 |
![]()
Сообщение
#35
|
Студент ![]() Группа: Участник Сообщений: 52 Регистрация: 24.4.2009 Пользователь №: 707 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Как это нет, все есть. QDataStream & operator<< ( QDataStream & stream, const QString & string )ж Смотрю описание класса, но в упор не вижу этой перегрузки! Объясните? Сообщение отредактировал posi4 - 29.7.2009, 13:11 |
|
|
den'ka |
![]()
Сообщение
#36
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 8.8.2008 Пользователь №: 258 Спасибо сказали: 4 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Как это нет, все есть. QDataStream & operator<< ( QDataStream & stream, const QString & string )ж Смотрю описание класса, но в упор не вижу этой перегрузки! Объясните? См описание QString а именно Related Non-Members Данный оператор реализован не как член ф-ция класса QDataStream |
|
|
posi4 |
![]()
Сообщение
#37
|
Студент ![]() Группа: Участник Сообщений: 52 Регистрация: 24.4.2009 Пользователь №: 707 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо за совет, разобрался!
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 30.6.2025, 9:38 |