crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Char и QString
whyt
  опции профиля:
сообщение 29.3.2009, 15:04
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


добрый день всем. вот возник такой вопрос. имеется некая переменная типа QString, из нее изымается один символ методом Str.mid(1,1), соответственно на выход мы имеем переменную типа QString размером в один символ. теперь вопрос, реально ли эту переменную конвертировать в Char (логично что сам QString нельзя просто так перевести, ибо это строка, а Char - все же символ) ?? курил маны, юзал гугл..толком решения не увидел, а нужно все это для того,чтобы потом перебрать варианты с помощью switch ... case...(на определенный символ - определенное действие).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 29.3.2009, 15:22
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


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
  опции профиля:
сообщение 29.3.2009, 15:32
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   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
  опции профиля:
сообщение 29.3.2009, 15:41
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


У меня нет компилятора под рукой, но вот, что пишется в описании класса 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
  опции профиля:
сообщение 29.3.2009, 16:09
Сообщение #5


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


если разжуешь задачку, не укусим.

Другими словами: Че надо или че хош сотворить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
whyt
  опции профиля:
сообщение 29.3.2009, 16:23
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   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
  опции профиля:
сообщение 29.3.2009, 16:45
Сообщение #7


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


в какой кодировке сорцы?
погугли насчет юникода
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
  опции профиля:
сообщение 29.3.2009, 16:48
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


whyt, посмотри описание класса QChar
в списке функций есть несколько штук возвращающих uchar и char
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
whyt
  опции профиля:
сообщение 29.3.2009, 16:49
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 28
Регистрация: 29.3.2009
Пользователь №: 649

Спасибо сказали: 1 раз(а)




Репутация:   1  


сорцы в Юникоде..
щас погуглим, а почему именно эти?
а нельзя юзать
QChar::QChar ( char ch )
Constructs a QChar corresponding to ASCII/Latin-1 character ch.

вот это?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.3.2009, 16:51
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата
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.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.12.2024, 7:50