• Как сделать что бы в одном QHash ключе были как бы два ключа, что бы мог находить значение по любому известному из них?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Не слишком понятно, чего вы хотите добиться. Можете привести пример кода, который иллюстрирует вашу проблему и пример того, как вы собираетесь её решить (пусть код не работает даже)? Возможно вы просто не верно работаете с моделью и представлением.

    В любом случае, хэшу (обычному QHash) нельзя сделать два ключа.
    Ответ написан
    7 комментариев
  • Как пользоваться Shared Pointer в c++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Не слишком понятна суть вопроса. Зачем вам в этой программе shared pointer?
    Ответ написан
  • Книги по C++ для дипломной (редкие, или новинки)?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Это поможет сейчас. А это после защиты "диплома".
    Ответ написан
    3 комментария
  • Хронология познания программирования, или как вы учили C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Первый раз попробовал писать на C на курсах по программированию в 9ом классе. Потом на первом курсе института купил книгу Солтер, Клеппер "C++ для профессионалов" (лучше с неё не начинать конечно)... После того, как освоил C++ на достаточном уровне, взялся за Qt, потом за boost (уже чисто по работе). Было и есть много разных книг (легко гуглится и ищется по тому же тостеру), статей, личных проектов и т.п.
    Что касается алгоритма... Читаешь, пробуешь пример, пробуешь в каком-нибудь проекте. Добавить-то больше нечего. Практика == успешное изучение. Ну и забывать про знания в смежных областях не стоит. Операционные системы, работа памяти, проектирование и т.п. Мало просто знать синтаксис языка, нужно уметь решать какие-то задачи практической направленности.
    Ответ написан
    Комментировать
  • Какую литературу читать для изучения архитектуры компьютера и ОС?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Да куда уж там целую книгу... Вот что жизнено необходимо!
    Ответ написан
    Комментировать
  • На проекты какого типа сейчас востребованы c++ разработчики?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Но потыкавшись по форумам, сложилось впечатление, что на крестах сейчас в большинстве только поддержка старых (очень) проектов. А новые почти не пишут.

    Форумы -- плохой источник информации по данному вопросу. Тостер тоже.
    Зайдите на hh.ru, выберите расширенный поиск, укажите города Москва и Спб, в поле поиска введите "C++ "(латиницей без кавычек).

    И включите уже спеллчекер.
    Ответ написан
  • Нет ли утечки памяти в QByteArray?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Нет.
    Указатель на данные QByteArray (метод data()) валиден до реалокации или удаления объекта.
    Ответ написан
    Комментировать
  • Что делать со скоростью работы итераторов в STL?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    0) Убедитесь, что проблема действительно в скорости итерирования, а не в алгоритме или во внутренних функциях. Профайлер вам в руки. Просто, учитывая кеш-линию, итерирование должно быть очень и очень быстрым.
    1) Если есть возможность использовать c++11, используйте for ( auto &&e : elements ) {}. Или, если есть буст, что-нибудь оттуда, boost_foreach там.
    2) Если функция Hit вдруг константная, используйте соотвествующие итераторы.
    3) Закешируйте objects.end(), чтобы вызывать один раз.
    4) Используйте ++i, а не i++.
    5) Попробуйте флаги оптимизации и релизную сборку.
    Ответ написан
    Комментировать
  • Как в функции получить указатель на поток, который её вызвал?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    В стандартной библиотеке можно получить id потока. Можно постараться сравнить его с заранее сохранённым id.
    std::this_thread::get_id()

    В Qt можно получить указатель на поток например так:
    static QThread * QThread::currentThread()
    или узнать в каком потоке объект:
    QThread * QObject::thread() const
    Ответ написан
    3 комментария
  • Наследование бинарной перегрузки?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    dynamic_cast, static_cast, reinterpret_cast
    Ответ написан
  • Доступ к полям базового класса?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Зачем полям в базовом классе быть private? Сделайте их protected и пользуейтесь в наследниках. А ещё лучше, сделайте в базовом классе конструктор с параметрами.
    Вирутальных конструкторов в C++ нет, но есть один паттерн, поищите какой.

    class Foo
    {
    public:
        Foo(int a1, int a2)
            : m_a1(a1)
            , m_a2(a2)
        {}
    
    protected: // Если необходим доступ в потомках, в остальных случаях private
        int m_a1;
        int m_a2;
    };
    
    class Bar : public Foo
    {
    public:
        Bar(int a1, int a2)
            : Foo(a1, a2)
        {}
    };


    PS
    Пользуйтесь #pragma once, деструктор в базовом классе должен быть виртуальным (не всегда... но пока просто делайте всегда), не смешивайте стили, не пишите имена транслитом.
    Ответ написан
    3 комментария
  • Почему вызывается метод из унаследованного класса в Qt?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    virtual
    Ответ написан
    Комментировать
  • Как создать динамический массив динамических объектов?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Самый простой вариант решения вашей задачи. Классов вроде Detail и Node может быть сколько угодно, главное, чтобы они реализовывали соотвествующие интерфейсы.
    struct IDetail {};
    struct INode {};
    
    struct Detail : public IDetail
    { };
    
    struct Node : public INode
    {
        std::vector<IDetail*> details;
    };
    
    struct Mechanism
    {
        std::vector<INode*> nodes;
    };
    Ответ написан
    Комментировать
  • На что потратить время и силы в плане программирования?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Купите/скачайте книгу (в более старом издении -- две книги) Седжвик Р. Алгоритмы на C++ (раз уже немного знаете этот язык) и начинайте изучать. Математики там минимум, C++ тоже минимум т.е. легко воспримите, а полученные знания окупятся в любом случае т.к. алгоритмы от языка не зависят. Заодно используйте книгу как детектор: не понравится/не поймёте -- смело идите в веб-разработку.
    Далее почитайте GoF. А потом всё что душе угодно, в зависмости от выбранной предметной области.

    PS
    Я намерено умолчал о книгах Макконнелла, Таненбаума, Фаулера и т.д... Но это не значит ,что их не следует читать! Просто к данному вопросу они не относятся.

    PPS
    Поделитесь, плз, источниками данных по з/п C++ программистов, а заодно и способом определения перспектив развития и дальнейшего использования языка C++. По моим данным, все совсем не так, как вы написали)
    Ответ написан
    Комментировать
  • Каков необходимый минимум знаний для junior'а/стажера (с++) и где найти работу студенту?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Сначала научитесь пользоваться гуглом (или хотя бы просто поиском по сайту). Основной скилл, без которого джуном не возьмут.
    Ответ написан
    Комментировать
  • Предподчтительные средства разработки под C++?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Давно под linux привык все делать через консоль там от гита до компилятора. Не будет ли это проблемой при трудоустройстве?

    Работа с консолью -- это всегда плюс для C++ программиста. Почитайте вакансии на hh.ru, например.

    Какие то программы с интерфейсом писать скорее всего не буду, привлекают алгоритмические задачи, обработка данный и т.д.

    Скорее всего, решать придётся более инженерные задачи: поправить какие-то дефекты, доработать функциональность, внедрить фичу и т.п. Поддержка легаси ещё. Т.е. вакансий, где требуется, допустим, уметь повернуть красно-черное дерево (да еще и пользоваться подобными навыками каждый день, а не на собеседовании...), на рынке труда не так-то уж и много.

    Про VS вообще забудьте (к слову, она печальна без вяких асситантов и решарперов) -- она нужна только программистам под винду (ваш КО). Под линукс есть Qt Creator, есть Eclipse, скоро выпустят нормальную версию CLion. Попробуйте всё, и пользуйтесь чем понравится.
    А IDE нужна в любом случае. Почему? Это удобно. А всякие true-хакеры любители блокнотов... В общем не будем)
    Ответ написан
  • Множественное наследование не нарушает ООП?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    В вашем случае больше подойдёт агрегация. И, в качестве совета: всегда старайтесь рассматривать агрегацию как альтернативу множественного наследования. Почитайте что-нибудь хорошее по ООП (найдите в сети, есть 100500 ответов на вопрос "что почитать по теме ...").

    А каноны ООП -- это нечно мифическое. Есть базовый набор принципов и рекомендаций, а остальное -- опыт и знания. Никогда не будет так как в школе: вот это отлично и так надо делать, а вот это плохо и так делать не надо.

    Если очень коротко:
    Интерфейс следуют рассматривать как описание набора похожих по смыслу действий, которые можно произвести с экземпляром класса. Например мы можем постучать по всему, реализует интерфейс IKnockable, и в контексте использования данного интерфейса нам не важны остальные характеристики объекта. Постучать, допустим можно по дереву, а можно и по голове.
    Понятие наследование от базового класса включает в себя наследование описательных и поведенческих характеристик. Допустим есть класс виджетов, которые умеют себя рисовать, реагировать на команды и прочее. Пусть от виджета наследуется класс MainWindow или класс Dialog. Эти классы умеют себя рисовать как и виджет, имеют свойства прозрачности (допустим) и прочие, однако содержат что-то новое элементы управления по умолчанию, предопределённые свойства модальности иное поведение и пр.
    Конечно неплохо было бы учесть некоторые принципы SOLID, но вопрос не про это...
    Ответ написан
    4 комментария
  • Почему в консоль попадают странные символы при считывании из файла?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Попробуйте wifstream, wcout, wstring и с кодировками, возможно, поиграть.
    А лучше, используйте Qt, тем более, что QtCreator у вас уже есть.

    PS
    А ещё лучше переходите на линукс... Винда -- это неудобно.
    Ответ написан
    Комментировать
  • Что нужно знать, чтобы устроиться c++ программистом?

    vt4a2h
    @vt4a2h Куратор тега C++
    Senior software engineer (C++/Qt/boost)
    Попробуйте устроиться на летнюю стажировку (около 2х месяцев обычно) в какую-нибудь компанию. Ну а что для этого нужно, зависит от компании т.е. читайте требования к вакансии.
    Ответ написан
    Комментировать
  • Как вывести видеопоток с web камеры в QGraphicsView на python?

    vt4a2h
    @vt4a2h
    Senior software engineer (C++/Qt/boost)
    Понятия не имею, как работает opencv. Но пару советов, которые могут помочь дам:
    1) Для graphics view нужна сцена doc.qt.io/qt-5/qgraphicsscene.html. Не забудьте установить сцену в конструкторе формы.
    2) На сцену можно добавлять как виджеты, так и рисунки. Например, метод addPixmap может подойти.
    3) В вашем варианте img = cv.QueryFrame(capture) вероятно рисунок, какого-то типа (не знаю какого). Самый примитивный вариант -- каждый раз брать рисунок и добавлять на сцену, предварительно её очистив. Это очень грубо, и скорее всего в документации есть способы получше. По крайней мере, программа сейчас в бесконечном цикле берёт кадры через определённые промежутки времени и рисует их где-то, т.е. работает примерно так, как я и описал.
    4) Вот эта строчка cv.ShowImage("WEB-camera", img) похоже создаёт окно (возможно с какими-то элементами управления). Возможно отсюда как-то можно получить окно или указать другой источник вывода... Хотя, в принципе у нас уже есть сам рисунок из пункта 3 и больше ничего особо и не надо -- запускайте в отдельном потоке и все дела.
    Ответ написан
    Комментировать