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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [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?
12  Qt / Вопросы новичков / Re: Собственная IDE для Qt : Ноябрь 06, 2016, 17:39
Мне необходимо написать IDE для своего языка программирования в рамках дипломного проекта и провести небольшую демонстрацию его возможностей.
А почему бы не рассмотреть такую вещь: https://eclipse.org/Xtext/ ?
13  Qt / Общие вопросы / Re: proxymodel результат фильтрации : Август 30, 2016, 11:06
Тут, или с делегатом работать -- в методе рисования рисовать выделение на тексте
Или аналогично в методе рисования view
А примера готового нет для такой фильтрации в дереве? А то у меня даже просто фильтрация в дереве без подсветки найденного не работает. Фильтр для дерева тупо работает: оставляет только те узлы в дереве, у которых весь путь до корня под фильтр попадает.
14  Qt / Общие вопросы / Re: proxymodel результат фильтрации : Август 30, 2016, 07:43
Вот, меня тоже подобное всегда интересовало при работе с моделями и фильтрацией.

Как сделать выделение найденного после фильтрации подобно тому как на этой картинке:
15  Qt / OpenGL / Re: Трехмерный движок для qt : Август 30, 2016, 07:40
Смущало бы, если бы они у меня были.
Попробуйте собрать 64-битную версию, обычно такие ошибки в MSVC именно на 64-битной сборке вылезают.
Страниц: [1] 2 3 ... 16

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