Russian Qt Forum

Qt => Общие вопросы => Тема начата: crocus от Март 20, 2006, 16:22



Название: QHash- непонятки??
Отправлено: 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(",", ".");
}

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


А затупил, на самом деле передается значение, соответственно вопрос как передать указатель???


Название: QHash- непонятки??
Отправлено: Dendy от Март 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;


Название: QHash- непонятки??
Отправлено: crocus от Март 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: