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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 [2] 3 4 ... 39
16  Qt / Установка, сборка, отладка, тестирование / Re: Бинарник и Библиотеки QT в разные папки : Июнь 20, 2022, 07:44
Цитировать
Как разделить бинарник и библиотеки QT в разные папки?

Если нет возможности задать всё в системных путях, то лучше скрипт запуска написать, в котором всё определить.

Для Windows что-то типа того

Код:
set MINGW_DIR=%CD%\3rdparty\mingw-7.3.0
set QT_DIR=%CD%\3rdparty\qt-5.12.6
set PATH=%MINGW_DIR%\bin;%QT_DIR%\bin;%QT_DIR%\plugins;%PATH%
cd "рабочая директория"
start "" "запускаемый бинарник" "параметры запуска"
exit 0
17  Разное / Новости Qt сообщества / Re: Доступ к Qt : Март 09, 2022, 07:26
https://github.com/qt здесь исходники есть со всей историей
18  Программирование / С/C++ / Re: setMask не работает : Февраль 04, 2022, 07:37
Наверное, из-за

Код
C++ (Qt)
p_mask.fillRect(0, 0, w, h, QColor(Qt::color0));
19  Программирование / С/C++ / Re: Слияние диапазонов : Январь 28, 2022, 10:55
Поиграйте с таким примером

Код
C++ (Qt)
#include <algorithm>
 
using Interval = ::std::pair< int, int >;
using Intervals = ::std::vector< Interval >;
 
// условие упорядочивания по значению начала диапазона
struct IntLowerCompare { bool operator () ( const Interval & left, const Interval & right )
{
   return left.second + 1 < right.first; }
};
 
// условие упорядочивания по значению конца диапазона
struct IntUpperCompare { bool operator () ( const Interval & left, const Interval & right )
{
   return left.first + 1 < right.second; }
};
 
// условие необходимости слияния
struct IntMergeCondition { bool operator () ( const Interval & left, const Interval & right )
{
   return left.second + 1 >= right.first; }
};
 
template < typename Intervals, typename Interval, typename LowerCompare, typename UpperCompare, typename MergeCondition >
void add ( Intervals & intervals, const Interval & interval, LowerCompare lower_compare, UpperCompare upper_compare, MergeCondition merge_condition )
{
   // итератор для первого значения в коллекции с возможно пересекающимся интервалом
   auto lower_iter = ::std::lower_bound( ::std::begin( intervals ), ::std::end( intervals ), interval, lower_compare );
   if ( lower_iter != ::std::end( intervals ) )
   {
       // если есть пересечение
       if ( merge_condition( interval, *lower_iter ) )
       {
           // итератор для последнего значения в коллекции с возможно пересекающимся интервалом
           auto upper_iter = ::std::upper_bound( ::std::begin( intervals ), ::std::end( intervals ), interval, upper_compare );
 
           auto first_iter = lower_iter;
           auto last_iter = upper_iter == ::std::end( intervals )
               ? lower_iter
               : upper_iter;
 
           // изменение пересекающегося
           lower_iter->first = ::std::min( first_iter->first, interval.first );
           lower_iter->second= ::std::max( last_iter->second, interval.second );
 
           // удаление лишних
           intervals.erase( ++first_iter, ++last_iter );
       }
       else
       {
           // вставка в середину
           intervals.insert( lower_iter, interval );
       }
   }
   else
   {
       // вставка в конец
       intervals.insert( lower_iter, interval );
   }
}
 
int main ( int, char ** )
{
   Intervals intervals = {{1, 2}, {8, 9 }};
   add( intervals, Interval{ -2, -1 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
   add( intervals, Interval{ 5, 5 },  IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
   add( intervals, Interval{ 5, 7 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
   add( intervals, Interval{ 3, 7 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
   add( intervals, Interval{ 0, 10 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
   add( intervals, Interval{ 11, 11 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} );
}
 
20  Программирование / С/C++ / Re: Слияние диапазонов : Январь 25, 2022, 23:31
Используйте для поиска в упорядоченном векторе функции алгоритмов https://en.cppreference.com/w/cpp/algorithm/equal_range, а далее решайте, что следует сделать - изменить значение по одному из итераторов или вставить значение в контейнер.
21  Qt / Общие вопросы / Re: Консольная програма на Linux. : Декабрь 02, 2021, 19:58
Используйте QCoreApplication вместо QApplication.
22  Компиляторы и платформы / Mac OS X / Re: Xcode Guard Malloc : Октябрь 01, 2021, 23:11
Так вопрос остался открытым. Указатель source указывает на достаточное количество байт, чтобы хранить весь этот текст и нулевой символ в конце? И занулен ли последний символ принудительно?
23  Компиляторы и платформы / Mac OS X / Re: Xcode Guard Malloc : Октябрь 01, 2021, 11:04
А строка нулем заканчивается? Предусмотрен для нулевого символа дополнительное поле в конце при выделении памяти под строку? Как правило из-за этого strlen и подобные падают.
24  Qt / Вопросы новичков / Re: QEventDispatcherWin32::registerTimer: Failed to create a timer : Сентябрь 10, 2021, 10:24
Ну
Код
C++ (Qt)
reply->deleteLater()
ещё бы нужно вызвать.
25  Qt / 2D и 3D графика / Re: как оформить выбор и нажатие 3d объекта? : Сентябрь 02, 2021, 08:15
На сцене нужно организовать несколько 3d объектов и при нажатии на них организовать какое либо действие. Подскажите куда смотреть и как правильно организовать?

Если имеется в виде QGraphicsScene, то смотреть нужно в сторону QGraphicsItem и его методов.
Если самостоятельная реализация событий на OpenGL, то в сторону http://www.prog.org.ru/index.php?topic=32756
26  Qt / Многопоточное программирование, процессы / Re: waitForDone : Июль 05, 2021, 09:21
Строго говоря, аналогом QThreadPool::waitForDone является QThread::wait.
Здесь же требуется дождаться выполнения всех задач в потоке.

Возможно, так получится подождать. Сам не пробовал).

Код
C++ (Qt)
thread->eventDispatcher()->processEvents( QEventLoop::AllEvents )
 
27  Qt / OpenGL / Re: Долгое рисование : Июнь 21, 2021, 21:16
Вопрос 2: а что собсно делать если отрисовка не усспевает? Полагаем что после отрисовки каждого (из 25К) объекта вызывается ф-ция IsInterrupred() (достаточно быстрая), без нее все равно не обойтись. И вот она вернула true. Дальше что?

Если в OpenGL отображать каждый элемент отдельно, то никаких ресурсов не хватит). Важным является отображение всей сцены за минимальное количество обращений к контексту OpenGL. Пока рисуется сцена, никаких обработок событий GUI производить не нужно. Формирование кадра отдельно,обработка событий GUI отдельно.

Сцена может меняться достаточно интенсивно, после каждого изменения формировать кадр расточительно. Поэтому существует метод update() для отложенного рисования.

Если сам процесс формирования кадра занимает 1.6 секунд, то требуется переделка самого процесса отображения. Для 25 тыс. объектов не большой детализации (элементы GUI) приемлемое время не более 20 мс.
28  Qt / OpenGL / Re: Долгое рисование : Июнь 21, 2021, 15:20
Полагаем что какое-то рисование есть/имеется, насколько оно быстро/оптимально - др вопрос, в любом случае найдется такой объем данных что скорость отрисовки не успеет за активностью юзера. В этой теме хотелось бы поговоритт как отрабатывать такую ситуацию

А что выносить в поток-то тогда)?
Основной профит здесь в "прореживании" и "группировке" событий. Если нет независимых этапов, то нечего и "прореживать".
Можно хоть миллион потоков сформировать, но, если поток отображения будет их ожидать, то отрисовка и взаимодействие с юзером будет тупить.
29  Qt / OpenGL / Re: Долгое рисование : Июнь 21, 2021, 13:28
Вопрос имеет архитектурный подтекст.
Как минимум, имеется несколько независимых этапа (можно выделить и больше):

- преобразование исходных данных в элементы отображаемой сцены,
- преобразование элементов сцены в данные для конвейера OpenGL,
- преобразование данных для конвейера OpenGL в кадр.

Эти этапы можно (нужно) выполнять независимо друг от друга.
При этом нет необходимости производить отображение при каждом элементарном изменении исходных данных.
На каждом этапе можно (нужно) забирать только изменения с предыдущего этапа (например, очередь изменений).
При этом события можно "проредить" (например, создание/удаление объекта и последовательное изменение одного и того же свойства и т.д.).

В OpenGL есть трудности с разделением функциональности по подготовке данных для конвейера и формированием кадра.
Если разделить все этапы, то "замерзание" GUI будет зависеть только от последнего этапа формирования кадра. А он будет зависеть от выбранной стратегии отображения - использования функциональности разных версий OpenGL, реализации шейдерных программ и т.п.
30  Программирование / Алгоритмы / Re: Найти дырки : Июнь 11, 2021, 07:36
Ну в как Вы триангулируете полигон на картинке выше?

Пользуюсь средствами GLUtessellator.
Страниц: 1 [2] 3 4 ... 39

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