All Projects → qbeon → QuickStreams

qbeon / QuickStreams

Licence: MIT License
An asynchronous programming library for the QML programming language (Proof of Concept)

Programming Languages

C++
36643 projects - #6 most used programming language
QMake
1090 projects

Projects that are alternatives of or similar to QuickStreams

Scihubeva
A Cross Platform Sci-Hub GUI Application
Stars: ✭ 683 (+1526.19%)
Mutual labels:  qml, qt5, qtquick
Awesome Qt Qml
A curated list of awesome Qt and QML libraries, resources, projects, and shiny things.
Stars: ✭ 1,118 (+2561.9%)
Mutual labels:  qml, qt5, qtquick
Spix
UI test automation library for QtQuick/QML Apps
Stars: ✭ 48 (+14.29%)
Mutual labels:  qml, qt5, qtquick
vatsinator-legacy
An open-source Vatsim monitor
Stars: ✭ 12 (-71.43%)
Mutual labels:  qml, qt5, qtquick
qml-ar
Seamless Augmented Reality module for QML using UchiyaMarkers
Stars: ✭ 32 (-23.81%)
Mutual labels:  qml, qt5, qtquick
Taoquick
a cool QtQuick/qml component library and demo(一套酷炫的QtQuick/Qml基础库和示例)
Stars: ✭ 481 (+1045.24%)
Mutual labels:  qml, qt5, qtquick
pardus-store
Pardus Application Store
Stars: ✭ 32 (-23.81%)
Mutual labels:  qml, qt5, qtquick
Osgqtquick
Intergation OpenSceneGraph to Qt Quick
Stars: ✭ 53 (+26.19%)
Mutual labels:  qml, qt5, qtquick
Qml Box2d
Box2D QML plugin
Stars: ✭ 223 (+430.95%)
Mutual labels:  qml, qt5, qtquick
Autoannotationtool
A label tool aim to reduce semantic segmentation label time, rectangle and polygon annotation is supported
Stars: ✭ 113 (+169.05%)
Mutual labels:  qml, qt5, qtquick
maxLibQt
A collection of C++ classes and QtQuick QML components for use with the Qt framework.
Stars: ✭ 18 (-57.14%)
Mutual labels:  qml, qt5, qtquick
CatLearnQt
CatLearnQt,提供QWidget,Quick,网络,串口,基础库和示例。案例软件支持样式切换,与国际化。
Stars: ✭ 63 (+50%)
Mutual labels:  qml, qt5, qtquick
QDashBoard
Sample dashboard developed with QML. Login, plots and several screens.
Stars: ✭ 34 (-19.05%)
Mutual labels:  qml, qt5, qtquick
QtIosCMake
📱 Deploy Qt Application for iOS with a single macro when using CMake.
Stars: ✭ 35 (-16.67%)
Mutual labels:  qml, qt5, qtquick
Kaidan
[Replaced by https://invent.kde.org/network/kaidan] Kaidan, a simple and user-friendly Jabber/XMPP client for every device and platform.
Stars: ✭ 67 (+59.52%)
Mutual labels:  qml, qt5, qtquick
QtMobileApp
This repository contains basic template for Qt for mobile app development using QML and C++ as backend to access RESTful API's
Stars: ✭ 16 (-61.9%)
Mutual labels:  qml, qt5, qtquick
QtDemos
This is a demo about Qt5, including Qt Custom Widget, Qt Multithreaded Downloader, QML Video Player(using OpenGL, FFmpeg and SDL2)
Stars: ✭ 18 (-57.14%)
Mutual labels:  qml, qt5, qtquick
python-qt-live-coding
Live coding environment for Python, Qt and QML.
Stars: ✭ 35 (-16.67%)
Mutual labels:  qml, qtquick
mini-qml
Minimal Qt deployment for Linux, Windows, macOS and WebAssembly.
Stars: ✭ 44 (+4.76%)
Mutual labels:  qml, qt5
g-timetracker
Global Time Tracker
Stars: ✭ 20 (-52.38%)
Mutual labels:  qml, qtquick

QuickStreams (PoC)

A proof of concept implementation of an asynchronous programming library for the QML and C++ programming languages inspired by Reactive Extensions, implementing the asynchronous streams paradigm.

IMPORTANT NOTE: QuickStreams is an asynchronous programming experiment. Work on this particular repository was suspended due to lack of feedback. It's not yet clear whether the concept of programming in streams is relevant.

Asynchronous Programming in Streams

QuickStreams makes asynchronous programming in C++ & QML easier and safer by providing a way to build consistent abstractions of complex asynchronous operations and transactions.

In contrast to Qt Quick's low level Signals & Slots mechanism, primitive Callbacks and the more sophisticated Promises and Futures - Streams are suitable for a much wider spectrum of problems and also offer a much wider set of useful features.

Streams can...

  • abstract away asynchronous (abortable and atomic) operations and transactions
  • be chained into asynchronous sequences
  • abstract away sequences of other streams
  • safely recover from unexpected errors
  • be retried on expected errors
  • be aborted
  • be repeated conditionally (asynchronous loops)
  • emit events

For a more detailed description, please visit qbeon.github.io/QuickStreams

Installation

  1. Clone this repository or download a release version to a folder within your projects source tree.

  2. Add the QuickStreams.pri file to your project profile .pro file:

include(QuickStreams/QuickStreams.pri) # optionally adjust the path
  1. Create a quickstreams::Provider object and inject it (by reference) into any C++ component to create streams in. Optionally create a quickstreams::qml::QmlProvider and expose it to QML as a context property to create streams in QML:
// in your projects main.cpp

#include <QuickStreams>

int main() {
	//...
	
	auto engine(new QQmlApplicationEngine);

	// Create a streams provider
	auto provider(new quickstreams::Provider);

	// Create a new QML streams provider wrapping a regular streams provider.
	auto qmlProvider(new quickstreams::qml::QmlProvider(engine, provider));
	
	// Expose the QML streams provider to QML
	// to enable streams creation from from QML
	engine.rootContext()->setContextProperty("QuickStreams", qmlProvider);
	
	//...
}

quickstreams::qml::QmlProvider should be injected (by reference) into C++ components exposing APIs to QML.

Examples

  • Network Filesystem API - A network filesystem simulation implemented in pure QML JavaScript. Represents the unreliable, asynchronous filesystem API in streams.

  • C++ API exposed to QML - Similar to the network filesystem API example, but implements the network filesystem API in C++ exposing it to QML using the quickstreams::qml::QmlProvider.

For a detailed description of the streams programming paradigm, use cases and features, please visit qbeon.github.io/QuickStreams

Feedback, Help & Contribution

License

Copyright (c) Roman Sharkov. All rights reserved.

Licensed under the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].