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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Qt Quick / Re: Qml 5.5 TreeView + QAbstractItemModel + Drag Drop : Декабрь 17, 2019, 00:25
Поднимаю старую тему, отвечаю, тут есть пример:
https://github.com/qt-labs/qt3d-editor

Вот только это для первых контролов, а c выходом Qt 5.14 от них уже избавились, как и планировалось:
https://wiki.qt.io/New_Features_in_Qt_5.14

Но воз и ныне там:
https://bugreports.qt.io/browse/QTBUG-61630

Вопрос, всем кто сталкивался с деревом в QML, как его правильно реализовать на вторых контролах? Есть готовые варианты? Или всё самому делать на ListView?
2  Qt / Пользовательский интерфейс (GUI) / Re: Организация отображения выполнения нескольких длительных процессов : Июнь 07, 2019, 23:20
Если под винду, то чтобы было модно не забудьте продублировать в QWinTaskbarButton::progress()
Так же можно отображать различные состояния QWinTaskbarButton::setOverlayIcon(const QIcon &icon)
3  Qt / Пользовательский интерфейс (GUI) / Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow : Июнь 07, 2019, 23:10
Сам периодически забываю, но когда создаёшь QDockWidget динамически, то чтобы сохранялось положение, необходимо установить имя объекта:
Код
C++ (Qt)
dockWidget->setObjectName("OhMyDock");

А для скрытия и отображения, наверное лучше всё же использовать специально для это имеющийся QAction:
Код
C++ (Qt)
dockWidget->toggleViewAction()->triggered(false);
4  Qt / Работа с сетью / Re: Qt пример работы с интернет : Октябрь 31, 2018, 19:11
Есть ещё вариант, если можно подключиться к устройству с помощью VLC: https://www.videolan.org
То можно использовать одноименную библиотеку, которая вроде как умеет всё то же самое: https://github.com/vlc-qt/vlc-qt

P.S.> Тему надо переименовать во что-то более адекватное, например: "Подключение к веб-камере (wiznet)", тогда тот кто имел дело или ищет похожее решение хоть сможет найти.
5  Qt / Работа с сетью / Re: Qt пример работы с интернет : Октябрь 31, 2018, 05:10
Если самопал грамотный и умеет вещать через rtsp, то есть до неприличия простой вариант на QtQuick:
https://forum.qt.io/topic/91848/rtsp-stream-with-qml

А ниже там предлагают вариант посложнее...
6  Qt / Работа с сетью / Re: Miracast (WiFi Display) RTP, RTSP : Октябрь 18, 2018, 20:39
У Windows 10 при стриме 1080p на телевизор (виртуальный дисплей) через Miracast, это занимает не более 5% CPU и ~8Mbit WiFi хотелось бы сопоставимой производительности, но похоже, что с gstreamer всё не так просто (раз нет аппаратных кодеков под Windows), как и с Miracast (бывают аппаратные ограничения WiFi).

OFFTOP:
А текущую задачу со стримом возможно получится решить и как-то проще через генерацию и отправку JPEG:
https://libjpeg-turbo.org
https://github.com/roehrdor/opencl-jpeg-encoder
Или это дохлый номер?... Просто есть вероятность, что принимающая сторона (аппаратная) сможет принять только JPEG кадры, но боюсь даже представить какого FPS и нагрузки удастся в этом случае добиться.


Вот ещё наткнулся на интересный проект со стримом:
https://github.com/obsproject/obs-studio

Там даже есть аппаратные кодеки, стримит в огромное количество web-сервисов (WebRTC, RTMP)
7  Qt / Работа с сетью / Miracast (WiFi Display) RTP, RTSP : Октябрь 16, 2018, 17:08
Технологии не стоят на месте, наверное, за этим будущее - уже сейчас телевизоры, телефоны, а теперь и PC (Windows 10) поддерживают эту технологию.

А что с отдельными программами?
Кто-нибудь уже реализовывал в своих приложениях для стрима видео?

В основе всё тот же RTSP, для которого в большинстве случаев используют GStreamer:
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/examples.html

С удивлением обнаружил, что Qt, вроде как, умеет стримить "из коробки" для любого приложения:
https://code.woboq.org/qt5/qtbase/src/plugins/platforms/openwfd/
Код
Bash
./helloworld -platform openwfd
Как использовать? Это работает?...
(https://stackoverrun.com/ru/q/5871760)

На сколько понял, реализация в Qt основана на старом, не поддерживаемом проекте:
https://www.freedesktop.org/wiki/Software/openwfd/
Уже есть реинкарнация:
https://github.com/albfan/miraclecast

Ещё натыкался на реализацию от Intel:
https://github.com/intel/wds

8  Qt / Вопросы новичков / Re: rtsp, rtp библиотека? : Октябрь 16, 2018, 16:07
Удалось найти приемлемое решение?

Тоже задумался на эту тему, вроде все используют это:
https://gstreamer.freedesktop.org
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/examples.html

Но возможно стоит сразу cделать Miracast (стандарт же/шире применение):
https://www.freedesktop.org/wiki/Software/openwfd/
Реинкарнация:
https://github.com/albfan/miraclecast

Ещё натыкался на реализацию от Intel:
https://github.com/intel/wds
(тоже использует gstreamer)

Но больше всего меня удивило, то что в Qt оно вроде уже и так есть:
https://code.woboq.org/qt5/qtbase/src/plugins/platforms/openwfd/
Вопрос лишь как использовать? ;)

9  Программирование / С/C++ / Re: Простой (?) поиск : Октябрь 12, 2018, 19:23
вот чего накидал:
Ну все-таки надо думать о производительности и расходе ресурсов (хотя бы иногда  Улыбающийся). Создавать многочисленные контейнеры на каждом поиске - ну это уж слишком
Если объектов десятки-сотни миллионов, тогда поиск лучше возложить на БД.
Что касается производительности, то поиск по хешу О(1) в среднем. Пересечение только замедлить может.
Ну в общем, принцип пересечения подмножеств я предложил, дальше вам решать, подойдёт ли он под конкретную задачу.
ps: у меня в проекте с 300-2000 тыс объектов подобные индексации используются, производительности хватает, памяти на индексирование до 200мб жрется.

Занятно, интересно сравнить по производительности и ресурсам с БД в памяти:
http://doc.qt.io/qt-5/qtsql-cachedtable-example.html

Код
C++ (Qt)
   QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
   db.setDatabaseName(":memory:");
   // ...

10  Qt / Qt Quick / Re: [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипан : Октябрь 10, 2018, 19:35

ВЕРНОЕ РЕШЕНИЕ:
QMouseEvent mouseEvent(type, pos, pos, button, Qt::NoButton, Qt::NoModifier);


Ранее...

Кто бы мог подумать, но решением оказался такой вот костыль:

Код
C++ (Qt)
QCoreApplication::sendEvent(window_, event);
 
if (event->type() == QEvent::MouseButtonRelease)
{
 auto item = window_->mouseGrabberItem();
 if (item)
   item->ungrabMouse();
}

Синтезированные события были идентичны с реальной мышью, но на перетаскиваемом элементе после синтезированного события MouseButtonRelease, заметил, что если пошевелить мышью, то элемент продолжал перетаскиватся (не отпускался) т.е. получается, что не каждое событие MouseButtonRelease одинаково полезно ;)
Остальные элементы, похоже, тоже захватывают мышь и не отпускают по синтезированным сообщениям.

Пути QtQuick неисповедимы... Вероятно, что-то делаю не так?...
11  Qt / Qt Quick / Re: Какую структуру программы вы делаете при использовании QML? : Октябрь 10, 2018, 00:11
При создании интерфейса на QtQuick делал упор на то чтобы каждый элемент и каждое окно отображались и работали отдельно от программы, т.е. можно запустить весь интерфейс или отдельный элемент через qmlscene и проверить его работу.

Модели данных и объекты подхватываются и создаются динамически через qml-синглтон из директории dummydata, в котором находятся qml-файлы имитирующие модели и объекты C++, которые в коде программы реализованы в виде отдельных классов (QObject) с набором свойств, данных и методов, сигналов/слотов если надо.

Такой подход позволят запускать и отлаживать сложный интерфейс столько сколько нужно без пересборки и перезапуска программы - это очень удобно и экономит много времени, хоть и требует создание dummy с заглушками на методы и фейковыми данными...
12  Qt / Qt Quick / [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипание) : Октябрь 09, 2018, 22:56
Здравствуйте, есть задача, надо отправить сообщения мыши в QtQuick интерфейс - эмуляция мыши (нажатия, перемещения).
Но сообщения, почему-то приходят лишь в один (текущий) QML-элемент (QQuickItem).

Казалось бы ничего сложного:

Код
C++ (Qt)
QQmlApplicationEngine engine;
 
//...
 
auto type = QEvent::MouseButtonPress;
auto pos = QPoint(50, 50);
 
const auto button = (type == QEvent::MouseMove ? Qt::NoButton : Qt::LeftButton);
QMouseEvent mouseEvent(type, pos, pos, button, button, Qt::NoModifier);
 
QCoreApplication::sendEvent(engine.rootObjects().at(0), &mouseEvent);

engine.rootObjects().at(0) - это окно QQuickWindow.

Всё это работает в простой реализации, НО не работает на сложных интерфейсах, где много элементов визуальных и не визуальных + 3D графика (Qt3D.Scene3D).

Точнее работает, но сообщения приходят лишь в один элемент. Если кликнуть мышью на другой элемент, то сообщения будут уже приходить только ему.
А ещё более странное, то что если перед отправкой сообщения сделать окно не активным, а прямо перед отправкой снова сделать активным, то сообщения мыши приходят как положено! Кто-нибудь с таким сталкивался?

Что делает чудотворное requestActivate()?
https://code.woboq.org/qt5/qtbase/src/gui/kernel/qwindow.cpp.html#_ZN7QWindow15requestActivateEv

К сожалению вызывать его постоянно не получится, внутри есть проверка на текущую активность окна, а постоянно деактивировать текущее окно - это уже не костыль, а костылище :)
Страниц: [1]

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