const и все-все-все
char greeting[] = “Hello”; char *p = greeting; // неконстантный указатель, // неконстантные данные *p = "Bye"; // можно ++p; // можно
const char *p = greeting; // неконстантный указатель, // константные данные char const *p = greeting; // то же самое *p = "Bye"; // нельзя ++p; // можно
char * const p = greeting; // константный указатель, // неконстантные данные *p = "Bye"; // можно ++p; // нельзя
const char * const p = greeting; // константный указатель, // константные данные *p = "Bye"; // нельзя ++p; // нельзя
Для функций-членов есть еще один модификатор
int foo() const // гарантирует, что функция не модифицирует // содержимое класса
QHash и структура в качестве ключа.
Тема легкая, но мне, почему-то далась достаточно напряжно.
Задача: использовать в качестве ключа QHash структуру.
Читаем документацию - для данной операции достаточно в структуре определить оператор "==" и написать глобальную функцию qHash для нашей структуры.
Решение:
struct MyStruct { quint8 a1; quint8 a2; quint8 a3; quint8 a4; bool operator==(const MyStruct struc) const { return (a1 == struc.a1 && a2 == struc.a2 && a3 == struc.a3 && a4 == struc.a4); } };
uint qHash(const MyStruct &struc) { //как-то вычисляем хеш //в моём случае в структуре содержалось 4 целых числа и я просто записал их в одно число со сдвигом uint result = struc.a1; result <<=(sizeof(quint8)*8); result = result|struc.a2; result <<=(sizeof(quint8)*8); result = result|struc.a3; result <<=(sizeof(quint8)*8); result = result|struc.a4; return result; }
Использование:
QHash < MyStruct, QString > myQHash
Всё работает отлично.
А вот при попытке использовать еще одну структуру в качестве значения QHash
QHash < MyStruct, MyOtherStruct > myOtherQHash
При запросе значения по ключу - всё работает отлично, но при попытке получить ключ по значению получаем надпись:
no match for 'operator==' in 'i.QHash<Key, T>::const_iterator::value [with Key = MyStruct, T = MyOtherStruct]() == avalue'
Страшная надпись, не правда ли? :)
Причина - не хватает операции "==" во второй структуре. Добавляем её и всё работает.
Вот так.
struct, key, qhash
Получение произвольного бита из числа.
int bit = (c >> i) & 1
Где с - число, i - номер получаемого бита.
Установка произвольного бита в числе.
b |= (1 << i); // set b &= ~(1 << i); // clear
где b - число, а i - номер бита
A Swarm of Nano Quadrotors
Стая мелких четырёхвинтокрыльников выполняют совместные учения.
Experiments performed with a team of nano quadrotors at the GRASP Lab, University of Pennsylvania. Vehicles developed by KMel Robotics. Special thanks to Professor Daniel Lee for his support.
Очень здорово.
Напомнило старый добрый HomeWorld :)
Ледяной палец. BBC.
BBC: Frozen Planet, 'Brinicle' ice finger of death from Dan Droopy on Vimeo.
Коротко о физике процесса:
Под формирующимся на поверхности льдом собирается концентрированная солёная вода, которая имеет температуру сильно ниже нуля. Крепкий переохлажденный рассол, стекая вниз, в зоне контакта с обычной морской водой, намораживает трубу из пресного льда. Как только эта рассольная сосулька касается дна, всё живое в месте прикосновения оказывается вмороженным в ледяную гробницу.
Pencil
Похожая на Dia утилита для создания диаграмм. Не так удобно, но примитивов побольше.
При этом дополнительно может использоваться для быстрой наброски интерфейсов.
Пробовал не плагин, а полноценную программу.
Работает, конечно, странно. То и дело теряется возможность добавлять новые элементы. Не умеет скреплять элементы между собой.
Но интересная.
Слот. Поиск по QTreeWidget. Еще вариант.
Ищет по листьям. По первому столбцу.
Если дерево одноуровневое, то проверку на childCount можно убрать.
void MyClass::find(QString aFindString) { QTreeWidgetItemIterator it(myTree); while (*it) { if (!(*it)->text(0).contains(aFindString, Qt::CaseInsensitive) && ((*it)->childCount() == 0)) { (*it)->setHidden(true); } else { (*it)->setHidden(false); } ++it; } }
Коннект идентичен.
QLineEdit *findEdit = new QLineEdit(this); connect(findEdit,SIGNAL(textEdited(QString)),this,SLOT(find(QString)));
Должно работать гораздо быстрее первого варианта :)