Russian Qt Forum

Qt => Вопросы новичков => Тема начата: phpCoder от Январь 01, 2015, 12:51



Название: Не работает Qhash со структурой
Отправлено: phpCoder от Январь 01, 2015, 12:51
Добрый день.
Qt опять тупит...

Значится есть в .h файле структура:
Код:
struct OrdersFields
{
    QString label;
    int width;
    bool isEditable;
    int index;
    OrdersFields(const QString &label, int width, bool isEditable = false) : label(label), width(width), isEditable(isEditable), index(0) {}
};
В приватной секции класса:
Код:
QHash<QString, OrdersFields> _ordersFields;
В реализации:
Код:
...
this->_ordersFields["Status"] = OrdersFields("Статус",120,true);
...
На этой строчке начинаются проблемы:

D:\Soft\Qt\5.4\mingw491_32\include\QtCore\qhash.h:756: ошибка: no matching function for call to 'OrdersFields::OrdersFields()'
return createNode(h, akey, T(), node)->value;
^
D:\Soft\Qt\5.4\mingw491_32\include\QtCore\qhash.h:756: candidates are:
D:\Documents\Qt\project\project\OrdersEdit.cpp:1: In file included from ..\project\OrdersEdit.cpp:1:0:
D:\Documents\Qt\project\project\OrdersEdit.h:24: OrdersFields::OrdersFields(const QString&, int, bool)
OrdersFields(const QString &label, int width, bool isEditable = false) : label(label), width(width), isEditable(isEditable), index(0) {}
^
D:\Documents\Qt\project\project\OrdersEdit.h:24: note: candidate expects 3 arguments, 0 provided
D:\Documents\Qt\project\project\OrdersEdit.h:18: OrdersFields::OrdersFields(const OrdersFields&)
struct OrdersFields
^
D:\Documents\Qt\project\project\OrdersEdit.h:18: note: candidate expects 1 argument, 0 provided

Что тут можно поделать?


Название: Re: Не работает Qhash со структурой
Отправлено: phpCoder от Январь 01, 2015, 13:05
А вот если использовать Qlist, то никаких ошибок нет...

Может Qhash и Qmap - это мусор?...


Название: Re: Не работает Qhash со структурой
Отправлено: Old от Январь 01, 2015, 13:09
Как только вы выучите С++, Qt тупить перестанет.


Название: Re: Не работает Qhash со структурой
Отправлено: m_ax от Январь 01, 2015, 13:12
Цитировать
Может Qhash и Qmap - это мусор?...
Конечно мусор.. Вообще не понятно нафига их придумали, народ только зря смущают..)


Название: Re: Не работает Qhash со структурой
Отправлено: phpCoder от Январь 01, 2015, 13:40
Ну так как делать правильно надо?


Название: Re: Не работает Qhash со структурой
Отправлено: lit-uriy от Январь 01, 2015, 14:00
Прочитай внимательно описание класса QHash, он предъявляет определённые требования к ключу и значению.
В частности требует оператора присваивания и функцию хэширования, а для некоторых методов ещё и конструктор по умолчанию.
Цитировать
QHash's key and value data types must be assignable data types (http://www.doc.crossplatform.ru/qt/4.6.x/containers.html#assignable-data-types).


Название: Re: Не работает Qhash со структурой
Отправлено: phpCoder от Январь 01, 2015, 14:14
По сравнению с ассоц. массивами из PHP, это... 


Название: Re: Не работает Qhash со структурой
Отправлено: phpCoder от Январь 01, 2015, 14:25
А этих контейнерах можно при вставке значений сохранить их нумерацию? Т.е.:
Код:
QHash<QString, int> map;
map["three"] = 3;
map["one"] = 1;
map["seven"] = 7;

Далее когда обходишь элементы, то в дебаг они должны попадать в том порядке, в каком они были добавлены:
Код:
QHashIterator<QString, int> i(map);
while (i.hasNext()) {
    i.next();
    cout << i.key() << ": " << i.value() << endl;
}
Нужно, чтобы вывел: 3, 1, 7. Т.е. сохранение порядка как в PHP?


Название: Re: Не работает Qhash со структурой
Отправлено: kambala от Январь 01, 2015, 16:23
нету здесь сохранения порядка гарантированного: мэп сортирует по ключу (оператор <), а хэш хранит в произвольном порядке.