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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не работает Qhash со структурой  (Прочитано 4642 раз)
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

Что тут можно поделать?
Записан
phpCoder
Гость
« Ответ #1 : Январь 01, 2015, 13:05 »

А вот если использовать Qlist, то никаких ошибок нет...

Может Qhash и Qmap - это мусор?...
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #2 : Январь 01, 2015, 13:09 »

Как только вы выучите С++, Qt тупить перестанет.
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Январь 01, 2015, 13:12 »

Цитировать
Может Qhash и Qmap - это мусор?...
Конечно мусор.. Вообще не понятно нафига их придумали, народ только зря смущают..)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
phpCoder
Гость
« Ответ #4 : Январь 01, 2015, 13:40 »

Ну так как делать правильно надо?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Январь 01, 2015, 14:00 »

Прочитай внимательно описание класса QHash, он предъявляет определённые требования к ключу и значению.
В частности требует оператора присваивания и функцию хэширования, а для некоторых методов ещё и конструктор по умолчанию.
Цитировать
QHash's key and value data types must be assignable data types.
Записан

Юра.
phpCoder
Гость
« Ответ #6 : Январь 01, 2015, 14:14 »

По сравнению с ассоц. массивами из PHP, это... 
Записан
phpCoder
Гость
« Ответ #7 : Январь 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?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #8 : Январь 01, 2015, 16:23 »

нету здесь сохранения порядка гарантированного: мэп сортирует по ключу (оператор <), а хэш хранит в произвольном порядке.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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