Qt library that transforms how we think about software interfaces through animated icons. a creative paradigm shift that opens up thousands of innovative ways to enhance user experience and software interaction. QAwesomeIcon supports multiple animation formats including GIF, sprite sheets, and SVG sequences, providing an intuitive API for creating dynamic window icons, taskbar icons, and system tray icons that bring your applications to life.
No more boring Icons lets give a shoot to some Creativity
Your app's taskbar icon is always visible, even when your app is minimized. Why not make it useful? QAwesomeIcon lets you communicate status, progress, and activity through that tiny icon at the bottom of the screen
I can think of thousands of creative ways to use QAwesomeIcon! Let me show you some of the possibilities:
Tired of boring static loading indicators? Transform your app's loading experience with animated icons that show exactly what's happening even from the Windows taskbar! and once the loading is finished you can see it directly without opening the app
- App startup progress
- File processing
- Network requests
- Data synchronization
- Background tasks
gear.gif Perfect for settings, configuration, or system operations
LoadingCircle.gif Classic spinning loader
note: Users can see your app's loading state even when it's minimized in the taskbar!
Make messaging apps come alive! Show typing indicators, message sending status, and communication states with engaging animations.
- Typing Indicators: Show when someone is typing (like the PointsLoading animation)
- Message Sending: Visual feedback for message delivery
- Chat Status: Online, offline, busy states
- Notification Badges: Animated counters for unread messages
- Avatar of the current Open chat:see the avatar of the user you are talking to directly from the task bar and see the avatar talking when he is typing
PointsLoading.gif - Use this as a "typing indicator"
Texting.gif Perfect for messaging apps and chat applications
SendingMessage.gif Ideal for email clients and instant messaging
Game Changer: Your users will know exactly when someone is typing, even from the taskbar!
- Character animations and states
- Level loading with themed animations
- Achievement unlocks
- Game status indicators
No limite you can even show high quality animations:
CatAnimation.gif
PlanetAnimation.gif
Error.gif Even errors can be engaging! Perfect for dialogs, warnings, and critical alerts and can be seen even if the app is minimized
- Art Tools: Animated brushes, color mixing, layer management
- Music Production: Audio waveforms, effect processing, recording status
- Video Editing: Timeline scrubbing, rendering progress, clip transitions
- Dashboard Analytics: Real-time data visualization, KPI indicators
- Project Management: Task progress, team collaboration status
- E-commerce: Shopping cart animations, payment processing, inventory updates
- Code Editors: Syntax highlighting animations, compilation progress
- Version Control: Git status animations, merge conflicts, deployment progress
- Testing: Test execution progress, coverage reports, quality metrics
- Cloud Storage: File sync status, upload progress, storage capacity
- Web Browsers: Tab loading, download progress, security status
- APIs: Request/response cycles, rate limiting, service health
- Micro-interactions: Button hover effects, form validation, user feedback
- Accessibility: Visual cues for hearing impaired users, attention grabbing alerts
- Gamification: Achievement unlocks, progress bars, reward systems
- Emotional Design: Mood indicators, personality expression, user satisfaction
🚀 The possibilities are endless! Every static icon in your application is an opportunity to create a more engaging, informative, and delightful user experience.
- GIF: Standard animated GIF files
- Sprite Sheets: Single image files containing multiple animation frames
- SVG Sequences: Multiple SVG files representing animation frames
lottie animations are planned for the future
- Qt Core
- Qt Widgets
- Qt GUI
- Qt SVG
- Qt Concurrent
- Qt QML
- Qt Quick
Make sure you have Qt and CMake installed on your system.
- Clone the repository:
git clone <repository-url>
cd QAwesomeIcon- Create a build directory:
mkdir build
cd build- Configure with CMake:
cmake ..- Build the project:
cmake --build .
Or Use Qt Creator directly
#include "qawesomeicon.h"
// Create an animated icon
QAwesomeIcon* icon = new QAwesomeIcon(this);
// Load a GIF animation
icon->loadFromFile("path/to/animation.gif", QAwesomeAnimationType::GIF);
// Attach to a widget
icon->attachToWidget(myWidget);
// Start playing
icon->play(QAwesomeLoopMode::InfiniteLoop);// Load a GIF
icon->loadFromFile("animation.gif", QAwesomeAnimationType::GIF);
// Load a sprite sheet
icon->loadSpriteSheet("sprites.png", QSize(32, 32), 10, 5); // 10 frames, 5 per row
// Load SVG sequence
QStringList svgFiles = {"frame1.svg", "frame2.svg", "frame3.svg"};
icon->loadSvgSequence(svgFiles);// Control playback
icon->play(QAwesomeLoopMode::InfiniteLoop);
icon->pause();
icon->resume();
icon->stop();
// Seek to specific frame
icon->seek(5);
// Configure settings
icon->setFrameRate(30); // 30 FPS
icon->setSpeedFactor(1.5); // 1.5x speed
icon->setScaleMode(QAwesomeScaleMode::KeepAspectRatio);// Set icon sizes for different DPI levels
QList<QSize> sizes = {QSize(16, 16), QSize(24, 24), QSize(32, 32), QSize(48, 48)};
icon->setIconSizes(sizes);
// Set device pixel ratio
icon->setDpr(2.0); // For 2x displaysQAwesomeIcon represents a fundamental shift in how we approach software interfaces. Instead of static, lifeless icons, we can now create:
- Personality: Give your applications character and charm
- Engagement: Keep users interested and involved
- Feedback: Provide immediate visual responses to user actions
- Status Communication: Instantly convey what's happening in your app
- Progress Indication: Show users that work is being done
- Error Prevention: Draw attention to important states or warnings
- New UI Patterns: Create entirely new interaction paradigms
- Accessibility: Make interfaces more inclusive and understandable
- Brand Differentiation: Stand out in crowded software markets
The project includes a comprehensive example application that demonstrates all features using the included GIF animations:
# After building
./QAwesomeIconExampleloadFromFile(const QString& path, QAwesomeAnimationType type): Load animation from fileloadFromData(const QByteArray& data, QAwesomeAnimationType type): Load animation from dataloadSpriteSheet(const QString& imagePath, const QSize& frameSize, int frameCount, int framesPerRow): Load sprite sheetloadSvgSequence(const QStringList& svgPaths): Load SVG sequence
attachToWidget(QWidget* widget, QAwesomeIconTargets targets): Attach to Qt widgetattachToWindow(QWindow* window, QAwesomeIconTargets targets): Attach to Qt windowdetach(): Remove attachment
play(QAwesomeLoopMode loopMode): Start playing animationpause(): Pause animationresume(): Resume paused animationstop(): Stop animationseek(int frameIndex): Jump to specific frame
setFrameRate(int fps): Set animation frame ratesetSpeedFactor(qreal factor): Set playback speed multipliersetScaleMode(QAwesomeScaleMode mode): Set scaling behaviorsetIconSizes(const QList<QSize>& sizes): Set icon sizes for different DPIsetDpr(qreal dpr): Set device pixel ratiosetPriority(QAwesomeAnimationPriority priority): Set animation priority
frameCount(): Get total number of framescurrentFrame(): Get current frame indexframeSize(): Get frame dimensionsstate(): Get current animation statespeedFactor(): Get current speed factorframeRate(): Get current frame rate
frameChanged(int index): Emitted when frame changesfinished(): Emitted when animation finisheserrorOccurred(const QString& message): Emitted on errors
QAwesomeAnimationType: Animation format typesQAwesomeAnimationState: Current animation stateQAwesomeLoopMode: Loop behavior optionsQAwesomeScaleMode: Scaling behavior optionsQAwesomeAnimationPriority: Animation priority levelsQAwesomeIconTarget: Icon attachment targets
If you liked the idea of QAwesomeIcon and find it useful, don't forget to ⭐ star the repository!
MIT License
- Initial release feel free to give more improvements and ideas on how to make it better the animation system for now still has lot of possible improvements