Просмотр сообщений
|
Страниц: [1] 2 3 ... 16
|
1
|
Программирование / С/C++ / Re: QScopedPointer
|
: Октябрь 25, 2018, 11:41
|
Название не помню, но это тот же паттерн что и в QVariant, boost::any а может и где еще
Так они же по значению принимают и хранят объект, а не по указателю как smart pointers. Видимо в этой теме имеется ввиду какой-то аналог std::any, который ограничивает тип объекта, который хранит. Но инициализировать такой аналог указателем уже нельзя будет.
|
|
|
2
|
Программирование / С/C++ / Re: QScopedPointer
|
: Октябрь 24, 2018, 12:07
|
Для "такой же член, который однако может быть и null" достаточно std::optional, зачем какие-то умные указатели нужны?
Разумно, но эта замена не эквивалентна. Напр QScopedPointer может указывать на полиморфный тип. А как можно скопировать объект произвольного полиморфного типа, имея только указатель на базовый класс?
|
|
|
3
|
Программирование / С/C++ / Re: QScopedPointer
|
: Октябрь 18, 2018, 19:15
|
Ну вот есть "просто член класса", агрегатом, не указатель - он почему-то прекрасно копируется. Интуитивно QScopedPointer - такой же член, который однако может быть и null. И что с того - почему он не копируется? Чему это противоречит? Оригинал владеет своим экземпляром, копия - своим, "уникальность" соблюдена.
Для "такой же член, который однако может быть и null" достаточно std::optional, зачем какие-то умные указатели нужны?
|
|
|
4
|
Программирование / С/C++ / Re: Поиск лучшего элемента через stl/boost алгоритм
|
: Июнь 29, 2018, 12:31
|
Да тут, наверное, проще свой qmax_element написать:
Вот у меня такое же мнение сложилось, что придется самому написать. Странно, что такая простая задача комбинацией готовых алгоритмов не решается. А в чём там выйгрышь? Он ведь тоже использует std::max_element в конечном счёте..
Да, boost::range не подходит в таком случае.
|
|
|
5
|
Программирование / С/C++ / Re: Поиск лучшего элемента через stl/boost алгоритм
|
: Июнь 29, 2018, 09:53
|
Что тебе мешает закешировать в предикате?
Что именно закешировать? Одно значение только? Все равно придется сравнивать с двумя аргументами предиката, это лишняя работа. Меня бы устроил вариант через boost::range типа такого: auto iter = boost::max_element(points | boost::adaptors::transformed(cost));
Простая и понятная запись, но оно не работает с lambda.
|
|
|
6
|
Программирование / С/C++ / Поиск лучшего элемента через stl/boost алгоритм
|
: Июнь 29, 2018, 08:48
|
Задача простая и довольно типичная: - имеется последовательность элементов (может быть контейнер, пара итераторов, ...) - есть нетривиальный алгоритм для оценки элементов, результат представляется в виде значения типа double, - нужно найти элемент (его индекс/итератор) с максимальным значением оценки. По сути нужно применить к каждому элементу алгоритм оценки и выбрать тот, у которого оценка максимальная. Алгоритм для оценки сложный и вызывать его несколько раз для одного и того же элемента неэффективно. Как можно эту простую задачу решить через алгоритмы в stl/boost чтобы не писать каждый раз вручную цикл наподобие такого: #include <vector> #include <iostream>
struct Point { double x, y, z; };
double dot(const Point& a, const Point& b) { return a.x * b.x + a.y * b.y + a.z * b.z; }
int main() { // data to process std::vector<Point> points = { {0, 0, 0}, {1, 2, 3}, {-1, -2, 5} };
// context for cost function Point dir{0, 1, 0};
// cost function is lambda wich captures some context // computationally expensive should not be called several times for same element auto cost = [&](const Point& p) { return dot(dir, p); };
// we need to find index of point with maximal cost size_t index = 0; double maxCost = cost(points[index]); for (size_t i = 0; i < points.size(); ++i) { double c = cost(points[i]); if (maxCost < c) { maxCost = c; index = i; } } std::cout << "Index of point with maximal cost: " << index << std::endl;
// how can this be written with stl/boost algorithms? }
? Алгоритм std::max_element не подходит сразу, т.к. требует предикат для сравнения и будет несколько раз вызывать функцию оценки для одного и того же элемента. Попробовал также boost::range, там есть boost::adaptors::transformed, но в него не получается передавать lambda, которая захватывает контекст. Оборачивать такую lambda в std::function - опять же потеря производительности, насколько я понимаю. Так чем можно заменить простой цикл с поиском лучшего элемента?
|
|
|
7
|
Qt / Qt Quick / Re: Не видно меню в Qt Creator, а также в QML приложениях
|
: Сентябрь 19, 2017, 13:00
|
Удалось побороть проблему.
Сначала вставил отдельную дискретную видеокарту, поставил драйвера для карты и сразу стало нормально все отрисовываться. После этого видеокарту убрал, проблема снова воспроизводилась. Тогда решил полностью удалить все драйвера для встроенной видеокарты, что с сайта Intel устанавливал. После этого винда сама скачала какие-то драйвера и установила их, после этого проблема исчезла.
Получается, что проблема была именно в драйверах с сайта Intel, которые ставились через их Driver Update Utility.
|
|
|
8
|
Qt / Qt Quick / Re: Не видно меню в Qt Creator, а также в QML приложениях
|
: Сентябрь 08, 2017, 14:37
|
Не воспроизводится, W7. Тут проблема не в драйверах, а в координатах отрисовки. Видимо где-то не учитывается заголовок. Возможно спутался флаг framelessWindow, попробуйте его принудительно установить.
На W7 у меня также не воспроизводится. Только на рабочем компьютере с W8.1, причем даже на Qt 5.9.1 воспроизводится проблема с затаскиванием QtOpenGLWidget на форму в Designer. Что делать не понятно, хоть винду на W7 менять...
|
|
|
9
|
Qt / Qt Quick / Re: Не видно меню в Qt Creator, а также в QML приложениях
|
: Сентябрь 04, 2017, 10:48
|
Никак не лечится, драйвера от Intel обновил снова и никак не помогло.
Воспроизводится элементарно: - открываю Designer (все нормально), - создаю Main Window (все нормально), - затаскиваю QtOpenGLWidget на форму и сразу все портится: картинка съезжает наверх (меню не видно) и шрифты размываются немного.
Если после этого удалить QtOpenGLWidget и свернуть/развернуть окно Designer, то снова все нормально отображается. Ни у кого такая проблема не воспроизводится?
P.S. Qt 5.7.1 и Win 8.1 x64
|
|
|
10
|
Qt / Qt Quick / Не видно меню в Qt Creator, а также в QML приложениях
|
: Июнь 28, 2017, 11:59
|
Пришлось столкнуться с QML по работе, используется Qt 5.7.1 на Windows 8.1 с интегрированной графикой на Core i5. У всех QML приложений, собранных с Qt 5.7.1 (другие версии пока не пробовал) сейчас общая проблема: все что отображается получается смещенным, как будто не учитывает высота заголовка окна. Но события (подсветка элементов управления) работает с правильными координатами. Поэтому получается очень странно: картинка смещена вверх, частично не видно внутренности окна (например, меню) и курсор мыши приходится смещать вниз относительно картинки чтобы попасть в GUI элемент.
Скриншот во вложении.
|
|
|
11
|
Qt / Qt-инструментарий / Re: qbs как начать
|
: Декабрь 27, 2016, 16:46
|
Вот мне тоже интересно было бы узнать про то, как "начать с qbs".
В проекте используются такие библиотеки как boost/gtest/VTK/OpenCV/Qt. Сейчас для сборки используется CMake, позволяет более или менее автоматизированно находить эти библиотеки с нужными модулями внутри них. В Linux библиотеки ставятся из репозиториев и CMake сам их находит. В Windows приходится самому собирать эти библиотеки в архив (под нужный компилятор с нужной разрядностью и нужным набором модулей в библиотеках). В CMake под Windows приходится указывать prefix (путь до места распаковки нужного архива с библиотеками), далее все нужные вещи CMake подцепляет автоматически. Файлы CMake для подключения этих библиотек предоставляются самим CMake или уже есть в самих библиотеках.
Хотелось бы понять как в qbs подключаются эти библиотеки к проекту. Важным моментом еще является то, что эти библиотеки разбиты на модули и далеко не все модули нужны приложению. В CMake при подключении библиотеки можно указывать какие именно модули нужны. Как такое разбиение подключаемых библиотек на модули реализуется в qbs?
И еще вопрос: можно ли уже сгенерировать MSVC solution из qbs проекта и заниматься разработкой в MSVC?
|
|
|
13
|
Qt / Общие вопросы / Re: proxymodel результат фильтрации
|
: Август 30, 2016, 11:06
|
Тут, или с делегатом работать -- в методе рисования рисовать выделение на тексте Или аналогично в методе рисования view
А примера готового нет для такой фильтрации в дереве? А то у меня даже просто фильтрация в дереве без подсветки найденного не работает. Фильтр для дерева тупо работает: оставляет только те узлы в дереве, у которых весь путь до корня под фильтр попадает.
|
|
|
15
|
Qt / OpenGL / Re: Трехмерный движок для qt
|
: Август 30, 2016, 07:40
|
Смущало бы, если бы они у меня были.
Попробуйте собрать 64-битную версию, обычно такие ошибки в MSVC именно на 64-битной сборке вылезают.
|
|
|
|
|