# TouchSensor 2.0 > Real-time tactile sensor exploration UI powered by Qt 6 and a custom Modern Qt component toolkit. ![Status](https://img.shields.io/badge/status-prototype-orange?style=for-the-badge) ![Qt 6](https://img.shields.io/badge/Qt-6.5%2B-41CD52?style=for-the-badge&logo=qt) ![C++23](https://img.shields.io/badge/C%2B%2B-23-00599C?style=for-the-badge&logo=cplusplus) ![CMake](https://img.shields.io/badge/CMake-3.20%2B-064F8C?style=for-the-badge&logo=cmake) ![UI Toolkit](https://img.shields.io/badge/Modern%20Qt-internal-8A2BE2?style=for-the-badge) ![TouchSensor Logo](images/logo.png) ## Highlights - Modern, material-inspired desktop shell built on the in-repo `modern-qt` library. - Modular component system (`NavComponent`, `ViewComponent`) for quick UI experiments. - Real-time tactile matrix visualisation via the `HeatMapPlot` wrapper around QCustomPlot. - Codec infrastructure (`components/ffmsep`) ready for custom tactile packet decoding. - Serial transport module scaffolded for COM port discovery and streaming. ## Architecture At A Glance - **Entry point**: `main.cc` composes the themed window, navigation rail, and card-based layout. - **Components**: `components/` hosts UI widgets, charts, and the tactile decoder pipeline. - **Modern Qt toolkit**: `modern-qt/` provides declarative wrappers, theming, and Material icon helpers. - **Data layer**: `components/ffmsep` implements codec registration, packet decoding, and tactile frame processing. - **Visualisation**: `components/charts/heatmap.*` exposes a themable heatmap control for sensor grids. ## Getting Started ### Prerequisites - CMake 3.20+ - A C++23-capable compiler (MSVC 19.3x, Clang 16+, or GCC 13+) - Qt 6 (Widgets, Network, PrintSupport modules) - Eigen3 - `spdlog` (fetched via package manager or provided to CMake) Ensure `Qt6_DIR` (or `CMAKE_PREFIX_PATH`) points to the Qt install so CMake can locate the required modules. ### Configure & Build ![](https://picgo-upload.cn-nb1.rains3.com/2025/10/407c29f139a834ed0f79a81347f810f1.png) ```powershell pacman -Sy pacman -S mingw-w64-x86_64-toolchain pacman -S mingw64/mingw-w64-x86_64-qt6-base pacman -S mingw-w64-x86_64-eigen3 mingw-w64-x86_64-yaml-cpp mkdir build cmake -G "MinGW Makefiles" -B build -DCMAKE_INSTALL_PREFIX="YOUR INSTALL PATH" cd build && mingw32-make install cat install_manifest.txt ``` To run from the build directory: ```powershell .\touchsensor.exe ``` On Linux/macOS adjust the Qt path and executable name accordingly. ## Project Layout ```text . |-- components/ | |-- charts/ # QCustomPlot-based visualisations (heatmaps, etc.) | |-- ffmsep/ # Codec system and tactile decoder experiments | |-- view.cc # Main dashboard composition | `-- ... # Additional UI widgets |-- modern-qt/ # In-house declarative Qt UI framework |-- serial/ # Serial communication helper library |-- images/logo.png # Current app branding |-- main.cc # Application bootstrap `-- CMakeLists.txt # Build script (adds Qt, Eigen, Modern Qt, Serial, SPDLOG) ``` ## Roadmap (WIP) - Flesh out tactile codec implementations and connect them to live serial streams. - Replace placeholder random data with decoded sensor frames. - Expand navigation targets beyond the current demo cards. - Capture screenshots or recordings for documentation. - Polish theming, animation masks, and landing experience. ## Contributing This repository is in active development; feel free to open issues or PRs once guidelines land. Until then, keep discussions in the project chat or issues board. ## Acknowledgements - [Qt](https://www.qt.io/) for the core UI framework. - [QCustomPlot](https://www.qcustomplot.com/) powering the heatmap widget. - [spdlog](https://github.com/gabime/spdlog) for logging (wired via CMake). - Internal **Modern Qt** toolkit built on top of creeper-qt utilities.