用qt代码实现遮罩层实现等待加载效果
时间: 2024-03-06 17:47:32 浏览: 159
Qt实现遮罩窗口。。。。
好的,下面是使用Qt代码实现遮罩层实现等待加载效果的示例代码:
```python
from PyQt5.QtCore import QSize, Qt, QThread, pyqtSignal
from PyQt5.QtGui import QMovie
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
class LoadingMask(QWidget):
def __init__(self, parent):
super().__init__(parent)
self.setFixedSize(parent.size())
self.setStyleSheet('background-color: rgba(0, 0, 0, 128);')
self.movie = QMovie('loading.gif')
self.movie.setScaledSize(QSize(100, 100))
label = QLabel(self)
label.setMovie(self.movie)
label.move(self.width() // 2 - 50, self.height() // 2 - 50)
def start(self):
self.movie.start()
def stop(self):
self.movie.stop()
self.hide()
class WorkerThread(QThread):
finished = pyqtSignal()
def run(self):
# 模拟耗时操作
import time
time.sleep(5)
self.finished.emit()
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('遮罩层实现等待加载效果')
self.resize(500, 500)
self.loading_mask = LoadingMask(self)
self.worker_thread = WorkerThread(self)
self.worker_thread.finished.connect(self.on_finished)
def on_finished(self):
self.loading_mask.stop()
def do_something(self):
self.loading_mask.start()
self.worker_thread.start()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
window.do_something()
sys.exit(app.exec_())
```
这个示例代码中,首先定义了一个LoadingMask类,它继承自QWidget,用于实现遮罩层和等待加载动画的显示和隐藏。在LoadingMask的构造函数中,设置其大小和背景颜色,并创建一个QMovie用于加载动画gif,然后将QMovie放置在遮罩层中央。start和stop方法用于启动和停止动画和遮罩层的显示。
MainWindow继承自QWidget,是主窗口类。它包含了一个LoadingMask实例和一个WorkerThread实例。do_something方法用于启动等待加载的操作,它首先调用LoadingMask的start方法显示遮罩层和加载动画,然后启动WorkerThread执行耗时操作。WorkerThread是QThread的子类,用于模拟耗时操作,它执行完成后会发送一个finished信号。MainWindow的on_finished方法用于接收WorkerThread发送的finished信号,并调用LoadingMask的stop方法隐藏遮罩层和动画。
在主函数中,创建一个QApplication实例和MainWindow实例,然后调用MainWindow的show方法显示主窗口,并调用do_something方法启动等待加载的操作。最后调用QApplication的exec_方法进入Qt事件循环。
阅读全文