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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QHash- непонятки??  (Прочитано 3284 раз)
crocus
Гость
« : Март 20, 2006, 16:22 »

Вообщем вот код
Код:

QHash<QString, int> hash_valid;
hash_valid.insert( "txtSo_0", 1 );
hash_valid.insert( "txtSo_1", 2 );

QHash<QString, int>::const_iterator k = hash_valid.constBegin();
while ( k != hash_valid.constEnd() )
{
            strValid(k.key());
++k;
}
..........и так далее

void FlatSeach::strValid(QString str)
{
    str.replace(QRegExp ("[A-Za-z]"), "");
    str.replace(",", ".");
}

Теоретически из полей должны вырезаться буквы и меняться запятая на точку, но получается лабуда.


А затупил, на самом деле передается значение, соответственно вопрос как передать указатель???
Записан
Dendy
Гость
« Ответ #1 : Март 20, 2006, 17:32 »

Кхммм... Вообще-то ключи менять нельзя никак через итераторьІ. Только удалением/вставкой новьІх полей.

Предлагаю другой вариант:

Код:
QHash<QString,int> hash, newhash;
...
for ( QHashIterator<QString,int> it( hash ); it.hasNext(); )
{
  it.next();
  newhash[ toStrValid( it.key() ) ] = it.value();
}
hash = newhash;
Записан
crocus
Гость
« Ответ #2 : Март 21, 2006, 02:46 »

to Dendy
Так вообще не работает:
Код:

flatseach.cpp:509: error: no match for 'operator[]' in 'newhash[((FlatSeach*)this)->FlatSeach::strValid(QString(((const QString&)(+(&it)->QHashIterator<Key, T>::key [with Key = QString, T = int]()))))]'
C:/Qt/4.1.0/include/QtCore/../../src/corelib/tools/qhash.h:601: note: candidates are: T& QHash<Key, T>::operator[](const Key&) [with Key = QString, T = int]
C:/Qt/4.1.0/include/QtCore/../../src/corelib/tools/qhash.h:595: note:                 const T QHash<Key, T>::operator[](const Key&) const [with Key = QString, T = int]

Оказалось гораздо проще:
Код:

 QHash<QString, int> hash_valid;
hash_valid.insert( txtSo_0, 1 );
hash_valid.insert( txtSo_1, 2 );
QHash<QString, int>::const_iterator k = hash_valid.constBegin();
while ( k != hash_valid.constEnd() )
{
            strValid(k.key());
++k;
}

Обратите внимание просто убрал кавычки, т.е. теперь в функцию передается значение txtSo_1 :lol:
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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