https://github.com/mjlee111/qt_example
Simple QT based GUI examples.
https://github.com/mjlee111/qt_example
cpp gui qt qt-examples
Last synced: about 2 months ago
JSON representation
Simple QT based GUI examples.
- Host: GitHub
- URL: https://github.com/mjlee111/qt_example
- Owner: mjlee111
- License: mit
- Created: 2024-08-28T01:26:36.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2024-09-23T05:32:04.000Z (9 months ago)
- Last Synced: 2025-03-26T15:54:15.905Z (3 months ago)
- Topics: cpp, gui, qt, qt-examples
- Language: C++
- Homepage:
- Size: 32 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# qt_example
`qt_example` a simple application developed using the Qt framework. This project implements a application with various functionalities.
![]()
![]()
## Table of Contents
- [Keyboard](#️-keyboard)
- [Serial](#-serial)
- [Astar](#-a-pathfinding)
- [IMU](#-imu-inertial-measurement-unit)
- [3DOF_robot_arm](#-3dof-robot-arm)
- [TextEditor](#-texteditor)
- [Contributing](#contributing)
- [License](#license)
- [Contact](#contact)## ⌨️ Keyboard
### Features- **Keyboard Layout**: Supports qwerty and Korean keyboard layouts.
- **Caps Lock and Shift Keys**: Toggles between uppercase and lowercase.
- **Text Input**: Displays input text in a `QLabel`.
- **Keypress Capture**: Captures key press event and display.
- **Special Functions**: Handles Backspace, Tab, Enter, Windows key, and other special functions.### Installation and Running
#### Prerequisites
- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]
- X11 & XTest (required only for Linux)
```bash
$ sudo apt-get install libx11-dev libxtst-dev
```#### Build and Run
1. **Clone the Source Code**
```bash
$ git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- Linux
```bash
$ cd qt_example/Keyboard
$ mkdir build && cd build
$ cmake ..
$ make
```
- Windows
```bash
$ cd qt_example/Keyboard
$ mkdir build && cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build . --config Release
```3. **Run**
- Linux
```bash
./keyboard
```
- WindowsDouble-click the executable generated after building, or run it from the Command Prompt.

#### Usage
- **Text Input**: Click on the buttons to input text. Special keys like Backspace, Tab, and Enter perform their respective functions.
- **Language Switching**: Use the "Kor" or "영어" button to switch between Korean and English keyboard layouts.
- **Caps Lock**: Toggle Caps Lock to switch between uppercase and lowercase text.## 🔌 Serial
### Features
- **Serial Port Communication**: Establishes communication with serial devices using various baud rates.
- **Data Reception**: Reads and displays incoming serial data in a `QTextEdit`.
- **Data Transmission**: Allows sending data to the serial device via the `writeToDevice()` methods.
- **Device Management**: Lists available serial ports and allows opening or closing the connection.
- **Automatic Scroll**: Ensures the `QTextEdit` view automatically scrolls to the latest received data.
- **Status Indication**: Changes the background color of a status label based on serial activity.### Installation and Running
#### Prerequisites- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]
- For Windows: Ensure the Qt installation includes the Qt Serial Port module.
- For Linux: Install the libqt5serialport5 package (or 6).#### Build and Run
1. **Clone the Source Code**
```bash
$ git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- Linux
```bash
$ cd qt_example/Serial
$ mkdir build && cd build
$ cmake ..
$ make
```
- Windows
```bash
$ cd qt_example/Serial
$ mkdir build && cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build . --config Release
```3. **Run**
- Linux
```bash
./serial
```
- WindowsDouble-click the executable generated after building, or run it from the Command Prompt.
- Simple test with arduino. (returns NONE when no data to read, READ: ${DATA} when data available per 1 seconds.)

#### Usage
- **Connect to Serial Device:**
* Select a serial port from the dropdown menu.
* Set the desired baud rate.
* Click "OPEN" to establish the connection.- **Data Reception:**
* Incoming data will be displayed in the QTextEdit widget.
* The widget scrolls automatically to show the latest data.- **Data Transmission:**
* Use the `writeToDevice()` methods to send data to the connected serial device.- **Device Status:**
* The status label will turn green when data is received.
* The status label will return to its default color when no data is present.- **Clear Display:**
* Click the "CLEAR" button to clear the data from the display## 🧭 A* Pathfinding
### Features
- **Grid-Based Pathfinding**: Implements the A* pathfinding algorithm to find the shortest path on a grid.
- **Dynamic Grid Visualization**: Displays a dynamic grid in the GUI where users can set obstacles, start, and end points.
- **Interactive Controls**: Allows users to interactively set the start and end points and obstacles through the UI.
- **Path Display**: Visualizes the calculated shortest path in the grid using color-coding.
- **Error Handling**: Provides feedback when a valid path cannot be found or if the start and end points are not set.### Installation and Running
#### Prerequisites- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]
- For Windows: Ensure the Qt installation includes the necessary Qt modules.
- For Linux: Install the relevant Qt packages.#### Build and Run
1. **Clone the Source Code**
```bash
git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- **Linux**
```bash
cd qt_example/Astar
mkdir build && cd build
cmake ..
make
```
- **Windows**
```bash
cd qt_example/Astar
mkdir build && cd build
cmake -G "Visual Studio 16 2019" ..
cmake --build . --config Release
```3. **Run**
- **Linux**
```bash
./astar
```
- **Windows**
Double-click the executable generated after building, or run it from the Command Prompt.
![]()
### Usage
- **Initialize Grid:**
- Set the number of rows and columns using the provided input fields.
- Click "Generate" to create the grid.- **Set Start and End Points:**
- Click "Set Start" and select a cell to define the starting point (marked in green).
- Click "Set End" and select a cell to define the ending point (marked in red).- **Place Obstacles:**
- Click on any cell to toggle obstacles (marked in black).- **Find Path:**
- Click "Start A*" to execute the A* algorithm and display the shortest path (highlighted in blue).- **Clear Grid:**
- Click the "Reset" button to clear all points, obstacles, and reset the grid.- **Error Feedback:**
- If no valid path is found or if the start/end points are not set, a message will be displayed.## 📐 IMU (Inertial Measurement Unit)
### Features
- **Serial Port Communication**: Extends the functionality of the Serial project to communicate with [EBIMU][ebimu] sensors. Allows communication over various baud rates, with support for up to 115200.
- **Data Reception & Packet Analysis**: Reads incoming data from EBIMU sensors via serial communication, decodes sensor packets, and displays the values of parameters like acceleration, gyroscope, and magnetometer.
- **Real-time Data Visualization**: Utilizes OpenGL to render a 3D cube that reacts in real-time to changes in roll, pitch, and yaw values, providing visual feedback on the sensor's orientation.
- **Device Management**: Lists available serial ports and allows opening or closing the connection with EBIMU sensors. Automatically handles packet structure and parsing for seamless communication.
- **Automatic Scroll**: Ensures that the `QTextEdit` view, used for displaying raw data, automatically scrolls to the latest received data from the sensor.
- **Status Indication**: Provides visual feedback on sensor data reception by changing the background color of the status label.
- **Roll, Pitch, and Yaw Calculation**: Automatically computes roll, pitch, and yaw values from IMU sensor data, translating raw measurements into meaningful orientation angles.
### Installation and Running
#### Prerequisites- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]
- OpenGL for 3D visualization of IMU data
- EBIMU sensor (or any 9DOF sensor with compatible communication protocols)
- For Windows: Ensure the Qt installation includes the Qt Serial Port and OpenGL modules.
- For Linux: Install the libqt5serialport5 (or 6) and OpenGL libraries.#### Build and Run
1. **Clone the Source Code**
```bash
$ git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- Linux
```bash
$ cd qt_example/IMU
$ mkdir build && cd build
$ cmake ..
$ make
```
- Windows
```bash
$ cd qt_example/IMU
$ mkdir build && cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build . --config Release
```3. **Run**
- Linux
```bash
./IMU
```
- WindowsDouble-click the executable generated after building, or run it from the Command Prompt.
- Test the real-time visualization with an EBIMU sensor to see live changes in the orientation of the 3D cube.
![]()
#### Usage
- **Connect to IMU Sensor:**
* Select the EBIMU sensor's serial port from the dropdown menu.
* Set the desired baud rate and communication parameters.
* Click "OPEN" to establish the connection.- **Data Reception:**
* Incoming IMU data, including acceleration, gyroscope, and magnetometer values, will be displayed in the `QTextEdit` widget.
* The widget automatically scrolls to the latest data.- **3D Visualization:**
* As the sensor's orientation changes, the 3D cube rendered using OpenGL will react in real-time, rotating to reflect the changes in roll, pitch, and yaw.
- **Device Status:**
* The status label will turn green when data is received from the IMU.
* It will return to its default color when no data is present.- **Clear Display:**
* Click the "CLEAR" button to clear the data from the display.## 🤖 3DOF Robot Arm
### Features- **Robot Arm Control**: Control the angles of a 3DOF robotic arm using QSlider.
- **Link Length Customization**: Adjust the length of each arm link using QSpinBox.
- **Real-Time Visualization**: Displays the robotic arm in a `QGraphicsView` with real-time updates.
- **Joint and End Effector Visualization**: Each joint is marked with a blue circle, and the end effector is marked with a red circle.
- **Reset Functionality**: Reset the arm's position and link lengths to default values.### Installation and Running
#### Prerequisites
- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]#### Build and Run
1. **Clone the Source Code**
```bash
$ git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- Linux
```bash
$ cd qt_example/3DOF_robot_arm
$ mkdir build && cd build
$ cmake ..
$ make
```
- Windows
```bash
$ cd qt_example/3DOF_robot_arm
$ mkdir build && cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build . --config Release
```3. **Run**
- Linux
```bash
./3DOF_robot_arm
```
- WindowsDouble-click the executable generated after building, or run it from the Command Prompt.

#### Usage
- **Joint Angle Control**: Use the sliders to adjust the angles of the three joints. The corresponding angle value is displayed in real-time next to each slider.
- **Link Length Customization**: Adjust the length of each link using the spin boxes labeled `link1`, `link2`, and `link3`. The arm will update dynamically based on the entered values.
- **Generate Arm**: Click the "Generate Arm" button after setting the link lengths to visualize the updated robotic arm.
- **Reset Arm**: Click the "Reset" button to reset the arm's position and link lengths to their default values.## 📝 TextEditor
### Features
- **File Open**: Opens `.txt`, `.c`, and `.cpp` files using a file dialog.
- **File Save**: Saves the opened file or saves it under a new name.
- **File Editing**: Displays file content in a `QTextEdit` widget, allowing for easy text editing.
- **Read-Only Mode**: Files can be opened in read-only mode or edited based on the user's actions.
- **Folder Selection**: Allows folder selection through a folder dialog.
- **GUI Components**: Uses a clean and simple GUI with `QMainWindow`, `QTextEdit`, `QPushButton`, and `QLabel`.### Installation and Running
#### Prerequisites
- CMake
- Qt 5 or Qt 6 -> [Qt Docs][qtlink]
- X11 & XTest (required only for Linux)```bash
$ sudo apt-get install libx11-dev libxtst-dev
```#### Build and Run
1. **Clone the Source Code**
```bash
$ git clone https://github.com/mjlee111/qt_example.git
```2. **Build**
- **Linux**
```bash
$ cd qt_example/TextEditor
$ mkdir build && cd build
$ cmake ..
$ make
```- **Windows**
```bash
$ cd qt_example/TextEditor
$ mkdir build && cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build . --config Release
```3. **Run**
- **Linux**
```bash
./texteditor
```- **Windows**
Double-click the executable generated after building, or run it from the Command Prompt.

#### Usage
- **Opening a File**: Use the "Open" button to browse for `.txt`, `.c`, or `.cpp` files and display their content in the editor.
- **Editing a File**: Once a file is opened, its content can be modified in the text editor. The "Save" button is enabled to allow saving changes.
- **Save As**: Use the "Save As" button to save the current file under a new name or location.
- **Close File**: Clears the text editor and disables saving functionality if no file is open.
- **Folder Selection**: Click the "Open Folder" button to select a folder and retrieve its path.## Contributing
Feel free to submit issues, feature requests, and pull requests to improve the package.## License
This project is licensed under the MIT License - see the [LICENSE][LICENSE] file for details.## Contact
For any questions or feedback, please contact [[email protected]][email].[qtlink]: https://doc.qt.io/
[ebimu]: https://www.e2box.co.kr/
[LICENSE]: https://github.com/mjlee111/qt_example/blob/master/LICENSE
[email]: mailto:[email protected]