maskoverlay.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef MASKOVERLAY_H
  2. #define MASKOVERLAY_H
  3. #include <QMap>
  4. #include <QObject>
  5. #include <QPointer>
  6. #include <QProgressBar>
  7. #include <QTimer>
  8. #include <QWidget>
  9. #include <functional>
  10. class MaskOverlay : public QObject
  11. {
  12. Q_OBJECT
  13. public:
  14. enum FindMode { ActiveWindow, MainWindow, ParentWindow };
  15. struct OverlayContext
  16. {
  17. QWidget* maskWidget = nullptr;
  18. QProgressBar* progressBar = nullptr;
  19. QTimer* timeoutTimer = nullptr;
  20. std::function<void()> timeoutCallback;
  21. };
  22. static MaskOverlay* instance();
  23. void setGlobalStyle(const QString& styleSheet);
  24. void setProgressBarStyle(const QString& styleSheet);
  25. void setProgressValue(QWidget* target, int value); // 新增方法
  26. void show(QWidget* target = nullptr,
  27. int timeoutMs = 3000,
  28. FindMode findMode = ActiveWindow,
  29. std::function<void()> timeoutCallback = nullptr);
  30. void hide(QWidget* target = nullptr);
  31. void setTimeout(QWidget* target, int milliseconds);
  32. protected:
  33. bool eventFilter(QObject* watched, QEvent* event) override;
  34. private:
  35. explicit MaskOverlay(QObject* parent = nullptr);
  36. QWidget* findBestTarget(QWidget* hintTarget, FindMode mode);
  37. void setupOverlay(QWidget* target);
  38. QMap<QWidget*, OverlayContext> overlays_;
  39. QPointer<QWidget> lastShownTarget_;
  40. QString globalStyle_;
  41. QString progressStyle_;
  42. static MaskOverlay* instance_;
  43. };
  44. #endif // LOADINGMASK_H