Coming from Qt / C++
If you've built desktop apps with Qt, tape's component model will feel natural — but without the framework overhead, MOC step, or C++ complexity.
signals & slots
Qt
signals: and slots: in class header. MOC generates the glue. connect() with member-function pointers is checked at compile time (the older SIGNAL()/SLOT() strings only at runtime); emitting goes through the meta-object system.
Tape
event on_click() + fire on_click(). The handler is a typed function pointer bound when the component is created; a wrong signature is a compile error, and fire is one indirect call. No MOC, no meta-object lookup.
widget hierarchy
Qt
QWidget inheritance tree. Override paintEvent, sizeHint. Parent-child ownership.
Tape
No inheritance. Components compose via slot and view {} trees. Leaf components implement paint/measure.
styling
Qt
QSS (Qt Style Sheets) — CSS subset, applied at runtime, string-based selectors.
Tape
#style region — sets typed props on components. Compile-time validated. No runtime selector engine. State selectors (:hovered) are specified, not yet implemented.
build system
Qt
CMake + MOC + UIC + RCC. Separate .ui files, .qrc resources, .h/.cpp split.
Tape
tape build app.tape -o app.exe — one command. Components, styles, tests all in .tape files.
what stays the same
- - Native compiled (no interpreter in prod)
- - Component-based UI architecture
- - Props/properties drive component state
- - Custom painting for leaf widgets
- - Desktop-first (not web-to-native)