В общем, с помощью полученных советов у меня получилось нарисовать tree view. Проблем теперь две 1. Контрол для редактирования не переключается обратно, на контрол для показа. 2. Когда я все-таки вышел обратно, нажав Esc, данные не поменялись на отредактированные.
Понедельник, 26 Декабря 2016 г. 20:27
+ в цитатник
Есть такой класс JTree. Как я понял, он предназначен для отображения иерархической tree view. Он позволяет заменять всякие пошлые иконки нормальными человоеческими вью, с возможностью их редактировать. Но я не вполне понимаю как сделать так, чтобы разным итемам соотвтетствовали вью разных типов. Скажите, это вообще возможно? Если да, то как это сделать, если CellEditor устанваливается один раз для всего tree?
Понедельник, 26 Декабря 2016 г. 20:27
+ в цитатник
Есть такой класс JTree. Как я понял, он предназначен для отображения иерархической tree view. Он позволяет заменять всякие пошлые иконки нормальными человоеческими вью, с возможностью их редактировать. Но я не вполне понимаю как сделать так, чтобы разным итемам соотвтетствовали вью разных типов. Скажите, это вообще возможно? Если да, то как это сделать, если CellEditor устанваливается один раз для всего tree?
Воскресенье, 25 Декабря 2016 г. 23:54
+ в цитатник
Побывал на днях на собеседовании (С++) и дали там задание оптимизировать функцию типа такой.
Employee findEmployee(vector< Employee > data, string addr) { for (auto it = data.begin(); it != data.end(); it++) { if (it->m_addr == addr) return it; } }
Что я перечислил:
изменение асимптотической сложности на O(log(n)) c map или на O(1) с unordered_map, если память позволяет, но оказалось, что алгоритм менять не предполагается;
передача входных и выходных параметров по ссылке;
замена it++ на ++it;
вынос конечного итератора в константу const auto itend = data.end() и сравнение итератора с ней.
Но от меня ждали чего-то еще. Я добавил пункт про возможность оптимизации сравнения строк путем сравнения типов данных более широких чем char, исходя из разрядности целевой платформы. И все. Но от меня ждали чего-то еще. Напишите пожалуйста, если знаете или догадались что именно? Я в непонятках.
Воскресенье, 25 Декабря 2016 г. 23:54
+ в цитатник
Побывал на днях на собеседовании (С++) и дали там задание оптимизировать функцию типа такой.
Employee findEmployee(vector< Employee > data, string addr) { for (auto it = data.begin(); it != data.end(); it++) { if (it->m_addr == addr) return it; } }
Что я перечислил:
изменение асимптотической сложности на O(log(n)) c map или на O(1) с unordered_map, если память позволяет, но оказалось, что алгоритм менять не предполагается;
передача входных и выходных параметров по ссылке;
замена it++ на ++it;
вынос конечного итератора в константу const auto itend = data.end() и сравнение итератора с ней.
Но от меня ждали чего-то еще. Я добавил пункт про возможность оптимизации сравнения строк путем сравнения типов данных более широких чем char, исходя из разрядности целевой платформы. И все. Но от меня ждали чего-то еще. Напишите пожалуйста, если знаете или догадались что именно? Я в непонятках.
что хочется получить: хочется руками не очень вникая в устройство того svg, что выдает инкскейп, получить "программу" для репрапа на языке г-код, который, по сути, состоит из "задать толщину линии, температуру головки/подложки, скорость; дождаться прогрева; тупо подряд отрисовать набор отрезков, в каждом выдавая еще и 4ю координату - подачу пластка".
давным-давно находил и правил какую-то питоновскую приблуду для фрезера, а не репрапа, но там было две проблемы 1. у фрезера нет 4й координаты - подачи пластика. приходилось считать руками 2. инкскейп иногда выдает очень странные файлы, в которых что-то не то и радкально не так интерпретируется.
ну или подскажите похожий плагин к инкскейпу. под переделку.
и да, нужен именно вектор. при растеризации через слайсер вечно идут проблемы с "ажурными решетками" и прочими кружевами, когда в ширину линии получается не 2 или 3, а 2.5 колбаски и щель между ними.
что хочется получить: хочется руками не очень вникая в устройство того svg, что выдает инкскейп, получить "программу" для репрапа на языке г-код, который, по сути, состоит из "задать толщину линии, температуру головки/подложки, скорость; дождаться прогрева; тупо подряд отрисовать набор отрезков, в каждом выдавая еще и 4ю координату - подачу пластка".
давным-давно находил и правил какую-то питоновскую приблуду для фрезера, а не репрапа, но там было две проблемы 1. у фрезера нет 4й координаты - подачи пластика. приходилось считать руками 2. инкскейп иногда выдает очень странные файлы, в которых что-то не то и радкально не так интерпретируется.
ну или подскажите похожий плагин к инкскейпу. под переделку.
и да, нужен именно вектор. при растеризации через слайсер вечно идут проблемы с "ажурными решетками" и прочими кружевами, когда в ширину линии получается не 2 или 3, а 2.5 колбаски и щель между ними.
что хочется получить: хочется руками не очень вникая в устройство того svg, что выдает инкскейп, получить "программу" для репрапа на языке г-код, который, по сути, состоит из "задать толщину линии, температуру головки/подложки, скорость; дождаться прогрева; тупо подряд отрисовать набор отрезков, в каждом выдавая еще и 4ю координату - подачу пластка".
давным-давно находил и правил какую-то питоновскую приблуду для фрезера, а не репрапа, но там было две проблемы 1. у фрезера нет 4й координаты - подачи пластика. приходилось считать руками 2. инкскейп иногда выдает очень странные файлы, в которых что-то не то и радкально не так интерпретируется.
ну или подскажите похожий плагин к инкскейпу. под переделку.
и да, нужен именно вектор. при растеризации через слайсер вечно идут проблемы с "ажурными решетками" и прочими кружевами, когда в ширину линии получается не 2 или 3, а 2.5 колбаски и щель между ними.
Мне немного стыдно за такой тупой вопрос, но я что-то не соображу, как быть. Есть чисто виртуальный класс Base с чисто виртуальным методом, например void func(). От него унаследован класс Derived, где этот метод определен. Есть метод в некоем классе, который берет vector.
Мне немного стыдно за такой тупой вопрос, но я что-то не соображу, как быть. Есть чисто виртуальный класс Base с чисто виртуальным методом, например void func(). От него унаследован класс Derived, где этот метод определен. Есть метод в некоем классе, который берет vector.
Краткое содержание предыдущих серий: в предыдущем посте меня убедили использовать boost. Я подключил в свой проект boost/filesystem, добавил параметр -lboost_system и пытался его построить. В ответ была получена ошибка cannot find -lboost_system. Предварительно я построил boost и добавил фолдер D:/boost1_62 в пути для линкера. Как я понимаю, гду-то должен быть файл libboost_system.o, но я его нигде не нашел. Вопрос: что я делаю не так и как это исправить? UPD. Решено. Оказывается, реально оно называется не boost_system, а boost_system-mgw49-mt-1_62.
Краткое содержание предыдущих серий: в предыдущем посте меня убедили использовать boost. Я подключил в свой проект boost/filesystem, добавил параметр -lboost_system и пытался его построить. В ответ была получена ошибка cannot find -lboost_system. Предварительно я построил boost и добавил фолдер D:/boost1_62 в пути для линкера. Как я понимаю, гду-то должен быть файл libboost_system.o, но я его нигде не нашел. Вопрос: что я делаю не так и как это исправить? UPD. Решено. Оказывается, реально оно называется не boost_system, а boost_system-mgw49-mt-1_62.
Понедельник, 24 Октября 2016 г. 15:36
+ в цитатник
Вопрос, чтобы не изобретать велосипед. Вот в Java есть прикольный класс File, сс помощью, которого, в частности, можно переходить от абсолютных путей к относительным. А есть что-нибудь подобное в C++? Я, конечно, могу и свой велосипед написать, но вдруг оно уже есть.
1. есть у меня в квартире куча термодатчиков. иногда они долго показывают одну и ту же температуру, тогда гнуплот начинает ворнинговать, что по оси У ноль, всё плохо. как задать именно разность температур, а не диапазон? 2. можно ли тупо подавить этот ворнинг, не давя другие? 3. гнуплот любит красиво ставить метки далеко друг от друга. можно ли заставить его ставить метки в 4 раза чаще? не через каждые 1/16 градуса, а именно в 4 раза чаще, чем по умолчанию?
а может стОит заменить гнуплот чем-то более удобным? на входе текстовый файл в формате "дата время т1 т2 т3 т4" или "дата время т1" из которого хочется видеть график температур в виде картинки (чтоб отобразить на вебстраничке), и это сидит в крон(таб)е.
Понедельник, 17 Октября 2016 г. 03:26
+ в цитатник
Допустим, есть multimap. Как грамотно просуммировать все значения? Как пробежать все значения? Я спрашиваю именно про multimap. С обычным map-ом никогда проблем не было, а mutlimap использовать не приходилось. Заранее спасибо.
Есть map. Хочу скопировать только те записи, которые соответствуют определенному string. map Написал код: copy_if(times.begin(),times.end(),copyTimes.begin(),[&Name](pair curPair)->bool { return (curPair.second == Name); }); При компиляции выдается ошибка:
assignment of read-only member 'std::pair
[Error: Irreparable invalid markup ('') in entry. Owner must fix manually. Raw contents below.]
Есть map<time_t,string>. Хочу скопировать только те записи, которые соответствуют определенному string. map<time_t, string> Написал код: copy_if(times.begin(),times.end(),copyTimes.begin(),[&Name](pair<time_t,string> curPair)->bool { return (curPair.second == Name); }); При компиляции выдается ошибка:
assignment of read-only member 'std::pair >::first'.
Не понимаю в чем дело. Я ж сравниваю, а не присваиваю нифига. Попробовал сделать лямбду mutable - не помогает, та же ошибка. В чем причина и что делать?